在我的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
1条答案
按热度按时间mrfwxfqh1#
Command
命名空间中,而不是Shell
命名空间中。parent::buildOptionParser()
。addArgument()
的第一个参数应该是字符串或\Cake\Console\ConsoleInputArgument
的示例,而不是数组。可以使用addArguments()
方法一次添加多个参数(请注意尾随的s
)。*参数(位置值)和选项是两回事,
-c
是一个需要使用addOption()
配置的选项。