Получить среду 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 для загрузки правильного файла?
Ответы
Ответ 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)