在Symfony2 ContainerAwareCommand中获取服务定义

时间:2012-10-17 10:46:11

标签: php symfony dependency-injection

我试图按照http://symfony.com/doc/2.0/components/dependency_injection/definitions.html#getting-and-setting-service-definitions

在ContainerAwareCommand中获取服务定义

然而,这会立即导致失败:

  

致命错误:调用未定义的方法appDevDebugProjectContainer :: getDefinition()

我无法在有关此行为的文档中找到更多信息,还有什么想法?

编辑:代码示例:

class MyCommand extends ContainerAwareCommand {

    protected function execute(InputInterface $p_vInput, OutputInterface $p_vOutput) {
        try {
            var_dump($this->getContainer()->getDefinition('api.driver'));
        } catch (\Exception $e) {
            print_r($e);
            exit;
        }
    }

}

1 个答案:

答案 0 :(得分:3)

例如,您提供的$container不是Container类的实例,而是ContainerBuilder类的实例。 Container没有任何名为getDefinition()的方法。

如果您没有显示您想要使用该定义的上下文,我不能说更多。

修改

下面我发布了使用ContainerBuilder的代码示例。它直接从symfony的命令中复制,所以我想这是一个很好的使用示例。

// Symfony/Bundle/FrameworkBundle/Command/ContainerDebugCommand.php

/**
 * Loads the ContainerBuilder from the cache.
 *
 * @return ContainerBuilder
 */
private function getContainerBuilder()
{
    if (!$this->getApplication()->getKernel()->isDebug()) {
        throw new \LogicException(sprintf('Debug information about the container is only available in debug mode.'));
    }

    if (!file_exists($cachedFile = $this->getContainer()->getParameter('debug.container.dump'))) {
        throw new \LogicException(sprintf('Debug information about the container could not be found. Please clear the cache and try again.'));
    }

    $container = new ContainerBuilder();

    $loader = new XmlFileLoader($container, new FileLocator());
    $loader->load($cachedFile);

    return $container;
}

最佳!