CakePHP 4控制台选项解析器用法

zaq34kh6  于 2022-11-11  发布在  PHP
关注(0)|答案(1)|浏览(134)

在我的CakePHP 4.0项目中,我试图实现一个我认为相当微不足道的目标:我希望有一个“基本”控制台命令,一些基本的设置,和其他类,扩展它。
具体来说,我希望在我的基类中定义一个[ ConsoleOptionParser ][1],因为所有其他Command类都应该可以访问相同的选项:
第一个
问题是当我跑的时候

bin/cake processProductImages -c CH

在shell中,我得到以下错误:

Error: Unknown short option `c`.

为什么?我没有在ProcessProductImagesCommand类中重定义buildOptionParser方法,所以我假设ConsoleOptionParser配置是从BaseCommand类继承的。
为了解决这个问题,我尝试将这个方法添加到ProcessProductImagesCommand类中:

protected function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionParser
    {
        return parent::buildOptionParser($parser);
    }

但在这种情况下当我跑的时候

bin/cake processProductImages -c CH

在shell中,我会得到以下错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4096 bytes) in /var/www/repo/public/vendor/cakephp/cakephp/src/Console/ConsoleOptionParser.php on line 430

我已经发现了在我需要的类中拥有我需要的选项的唯一实际方法是通过从BaseImportCommand类中复制整个buildOptionParser方法来完全重复子类中ConsoleOptionParser的初始化,但显然我不喜欢这种解决方案,因为它会导致无用的代码重复。[1]:https://book.cakephp.org/4/en/console-commands/option-parsers.html

mrfwxfqh

mrfwxfqh1#

  • 按照惯例,命令应该位于Command命名空间中,而不是Shell命名空间中。
  • 您无法在没有任何参数的情况下呼叫parent::buildOptionParser()
  • addArgument()的第一个参数应该是字符串或\Cake\Console\ConsoleInputArgument的示例,而不是数组。可以使用addArguments()方法一次添加多个参数(请注意尾随的s)。
    *参数(位置值)和选项是两回事,-c是一个需要使用addOption()配置的选项。
  • 如果您在选项解析阶段耗尽了130 MB以上的内存,那么您可能创建了一个无限循环。

相关问题