20

私のSymfony2バンドル拡張でservices.ymlは、ロードされています

$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
$loader->load('services.yml');

ただし、環境ごとに異なるサービス構成をロードしたい (例: テスト用に別のもの)。

現在の環境を取得するために私が見つけた例のほとんどは、コントローラー (例: $this->get('kernel')->getEnvironment()) 内でのアクセス用ですが、拡張機能ではコントローラー ベースのアクセスはできません。

Twig 拡張機能 - symfony2 環境によると、環境はコンストラクターで注入できますが、バンドル拡張機能が Symfony によってどのように登録/インスタンス化されるかがわからないため、環境を注入する方法がわかりません (grep で見つけた唯一の参照はキャッシュにあります)ファイル、これはあまり役に立ちません)。

config で env ごとにロードする別のサービス YAML ファイルを指定するにはどうすればよいですか? または、少なくとも環境を見つけて、Extension クラスをコーディングして正しいファイルをロードできるようにするにはどうすればよいですか?

4

2 に答える 2

40

通常、サービスをロードしている間、メソッドのプロトタイプは

public function load(array $configs, ContainerBuilder $container).

その後、次のことを行って環境にアクセスできます

$env = $container->getParameter("kernel.environment")

次に $env をテストして、現在の環境タイプを確認します。

何かのようなもの

if ("dev" == $env) {
    $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
    $loader->load('devServices.yml');
}
...

お役に立てれば!

于 2013-05-15T11:52:15.503 に答える
12
echo $this->container->get(‘kernel’)->getEnvironment(); 

最新バージョン (2.5)

于 2014-11-19T04:50:39.540 に答える