2

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;
        }
    }

}
4

1 に答える 1

3

あなたが提供した例では、クラス$containerのインスタンスではなく、クラスです。コンテナには という名前のメソッドがありません。ContainerContainerBuildergetDefinition()

その定義を使用したいコンテキストを示さなければ、これ以上は言えません。

編集:

以下に、を使用したコードの例を投稿しまし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;
}

一番!

于 2012-10-17T12:12:21.167 に答える