Symfony2自定义控制台命令在执行时显示为“未定义”

时间:2013-04-17 12:50:20

标签: symfony command

我在src / CollaboratorsBundle / Command中创建了一个新类,将其命名为GenerateFormRemindersCommand.php并将以下代码放入其中:

<?php
namespace Myproject\CollaboratorsBundle\Command;

use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;

class GenerateFormRemindersCommand extends ContainerAwareCommand{

    protected function configure() {
        $this->setName("generate:formReminders")
             ->setDescription('Send reminders by email to all collaborators with unanswered forms');
    }

    protected function execute(InputInterface $input, OutputInterface $output) {
        //some code
    }
}

执行后,我收到以下消息:

$ php app/console generate:formReminders
[InvalidArgumentException]
Command "generate:formReminders" is not defined.

我已经在我的AppKernel.php文件中检查了我的捆绑包已在其中注册了。

我尝试过添加parent:configure();配置方法,但没有任何结果。

我已经创建了一些其他正常工作的自定义命令。在这种情况下,我不明白我做错了什么。你呢?

提前致谢

5 个答案:

答案 0 :(得分:59)

我遇到了同样的麻烦,因为我在没有“Command”后缀的情况下命名了文件。 您必须将文件命名为“GenerateFormRemindersCommand.php”。

答案 1 :(得分:5)

我有同样的错误。我遇到的问题是我实现了构造函数来初始化存储库字段而不是{{1}}方法。

答案 2 :(得分:2)

如果您将命令配置为服务(用于依赖项注入或其他目的),并且该命令具有自定义构造函数,则不要忘记用console.command对其进行标记,例如

 your_service:
    class: Your\Class
    tags:
        - "console.command"

答案 3 :(得分:1)

您尚未将文件放在正确的位置。

查看您已经提到过的代码和使用的命名空间,您已将文件放在src / CollaboratorsBundle / Command中。虽然它必须放在src / Myproject / CollaboratorsBundle / Command。

答案 4 :(得分:0)

同样的问题,但因为我忘了extends ContainerAwareCommand