gpt4 book ai didi

php - 在 Symfony2 ContainerAwareCommand 中获取服务定义

转载 作者:行者123 更新时间:2023-12-04 05:28:20 26 4
gpt4 key购买 nike

我正在尝试根据 http://symfony.com/doc/2.0/components/dependency_injection/definitions.html#getting-and-setting-service-definitions 在 ContainerAwareCommand 中获取服务定义

但是,这会立即导致失败:

Fatal error: Call to undefined method 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;
}
}

}

最佳答案

在您提供的示例中 $container不是 Container 的实例类,但是 ContainerBuilder类。容器没有任何名为 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;
}

最好的!

关于php - 在 Symfony2 ContainerAwareCommand 中获取服务定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12932595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com