“xxx”命名空间中没有定义命令

时间:2016-08-02 04:09:58

标签: php symfony

我在symfony3上有一个很棒的项目。在这个项目中,我有ProjectFrameworkBundle。

项目/ FrameworkBundle /控制台/ Command.php

abstract class Command extends ContainerAwareCommand
{
    //...

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        // do some regular staff
        $exitCode = $this->executeCommand($input, $output);
        // do some regular staff
    }

    abstract protected function executeCommand(InputInterface $input, OutputInterface $output);

    //...
}

如果我将从Command类扩展任何命令,它将正常工作(已测试)。

但是,我有另一个包

项目/ FrameworkQueue /控制台/ Command.php

use Project\FrameworkBundle\Console\Command as BaseCommand;
abstract class Command extends BaseCommand
{
    // ...
    protected function executeCommand(InputInterface $input, OutputInterface $output)
    {
        // do some regular staff
        $exitCode = $this->executeJob($input, $output);
        // do some regular staff
    }

    abstract protected function executeJob(InputInterface $input, OutputInterface $output);

    // ...
}

因此,当我将amy命令从extends Project\FrameworkBundle\Console\Command更改为extends Project\QueueBundle\Console\Command时,它会从命令列表中隐藏。我试图删除executeCommandQueueBundle的所有工作人员,但这对我没有帮助。但如果我在这个命令中的PHP代码中犯了任何错误,我会看到异常。

有什么不对?我的错误在哪里或者这是一个错误。我在哪里可以找到收集和检查可用命令的symfony代码?

谢谢!

P.S。问题不在文件或类命名中 - 我多次检查它。当然,当我改变父类时,我改变了函数名。

2 个答案:

答案 0 :(得分:1)

如果命令扩展了ContainerAwareCommand,Symfony甚至会注入容器。但如果没有 - 你必须将你的命令注册为服务。

#app / config / config.yml    服务:

   app.command.your_command:
      class: Project\FrameworkBundle\Command\Console\YourCommand
      tags:
          -  { name: console.command }

在编译内核期间,Symfony通过标记 console.command 找到您的命令并注入应用程序命令列表

要查看有关此主题的详细信息,您可以查看官方文档 - https://symfony.com/doc/current/console/commands_as_services.html

答案 1 :(得分:1)

问题在于覆盖__construct中的QueueBundle\Console\Command方法。如果您尝试这样做:

public function __construct($name)
{
    parent::__construct($name);
}

......它不起作用。我不知道为什么,但我从这里把一些逻辑移到“执行前”行动。

全部谢谢!