首页 文章

symfony2 CLI [Symfony \ Component \ Debug \ Exception \ ContextErrorException]

提问于
浏览
3

在完整的Symfony堆栈应用程序中尝试使用Symfony2的控制台组件创建命令时遇到问题 .

如果我尝试通过DI传递我的服务,该命令在我尝试运行它时会抛出以下错误:

[Symfony\Component\Debug\Exception\ContextErrorException]  
Notice: Trying to get property of non-object

如果我使用ContainerAwareCommand创建命令并尝试使用我的服务

$这个 - > getContainer() - >获取( 'mtgu.api.card.list.response.data');

我明白了

[LogicException]                                                               
  The container cannot be retrieved as the application instance is not yet set.

正如前端控制器中使用的那样,我的服务正在被加载 . 这个问题变得陌生,好像我通过了存储库服务 - 我没有遇到这个问题!

是否有一些技巧可以将服务设置为可通过?或者我以某种方式搞砸了我的配置?

我通过在我的DI扩展中执行此操作来“自动加载”我的所有服务,而不是通过主要的services.yml将它们全部包含在内 . 我认为这或yml的顺序包括可能影响它 - 但我已经尝试手动包括一切但仍然没有快乐!

$finder = new Finder();
$finder->name('services.yml');
/**
* @var $file SplFileInfo
*/
foreach($finder->in(__DIR__.'/../') as $file) {
$loader = new Loader\YamlFileLoader($container, new FileLocator($file->getPath()));
$loader->load('services.yml');
}

供应商/包/命令/ services.yml

services:

mtgu.command.slugify:
    class: MightyStudios\MtguBundle\Command\SlugifyCommand
    tags:
        - { name: console.command }
    arguments:
      - @mtgu.api.card.list.response.data

我想这可能只是一些配置问题,但谷歌让我无法找到答案!有没有其他人遇到这个问题,他们可以放弃任何光明!?

非常感谢

1 回答

  • 3

    更好的结构是将您的服务文件放在捆绑包的 Resources/config 目录中(另请参阅所有核心捆绑包) . 但是,那不在意 .

    该问题由异常描述:由于尚未设置应用程序实例,因此无法检索容器 . 当 $this->applicationnull 时,ContainerAwareCommand#getContainer()方法中抛出了哪个 . 应用程序在Application#add()方法的第一行中设置 .

    这意味着在将命令添加到应用程序之前调用 $this->getContainer() . 也许你在构造函数中使用它?

    如果是,请将其删除,仅使用 Command#execute()Command#interact()Command#initialize() 中的容器 .

相关问题