3

別のバンドルに依存するバンドルを開発しています。

基本バンドルがインストールされていない場合に対処するために、コントローラー内で「bundle_exists()」関数を実行したいと思います。

問題は、インストールされているバンドルのリストを取得するにはどうすればよいか、またはバンドルの名前 (最終的にはバージョンも) を確認するにはどうすればよいかということです。

ありがとう。

4

4 に答える 4

8

@Rooneylの答えに加えて:

このようなチェックを行うのに最適な場所は、DI 拡張機能の内部です(例: AcmeDemoExtension)。これは、コンテナーがビルドされてキャッシュにダンプされると実行されます。リクエストごとにそのようなことを確認する必要はありません (コンテナはキャッシュされている間は変更されません)。キャッシュが遅くなるだけです。

// ...
class AcmeDemoExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $bundles = $container->getParameter('bundles');
        if (!isset($bundles['YourDependentBundle'])) {
            throw new \InvalidArgumentException(
                'The bundle ... needs to be registered in order to use AcmeDemoBundle.'
            );
        }
    }
}
于 2016-08-11T08:53:14.410 に答える
0

Andrey からの質問: How do I get a list of bundles in symfony2?

登録されたバンドル オブジェクト (クラスではない) の非静的メソッドを呼び出したい場合は、次の操作を実行できます。

$kernel = $this->container->get('kernel');
$bundles = $kernel->getBundles();
$bundles['YourBundleName']->someMethod();

コンソール'YourBundleName'から呼び出して取得できるバンドルの名前は次のとおりです。

php app/console config:dump-reference
于 2016-08-11T11:09:47.933 に答える