Получить среду Symfony2 в комплекте Расширение - программирование
Подтвердить что ты не робот

Получить среду Symfony2 в комплекте Расширение

В моем расширении пакета 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, находятся в файлах кеша, что не слишком полезно).

Как я могу указать другой файл YAML-сервисов для загрузки в env в config или, по крайней мере, узнать среду, чтобы я мог кодировать мой класс Extension для загрузки правильного файла?

4b9b3361

Ответ 1

Обычно при загрузке ваших услуг прототип метода должен быть

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');
}
...

Надеюсь, это поможет!

Ответ 2

echo $this->container->get(‘kernel’)->getEnvironment(); 

в последней версии (2.5)