Как получить среду в настраиваемом загрузчике маршрутов в Symfony2?

Я создал собственный загрузчик для своего пакета с целью загрузки различных маршрутов для каждой среды. Мой класс загрузчика выглядит так:

class ApiRouteLoader extends Loader
{
public function load($resource, $type = null)
{
$collection = new RouteCollection();

$resource = '@ApiBundle/Resources/config/routing.yml';
$type = 'yaml';

$importedRoutes = $this->import($resource, $type);

$collection->addCollection($importedRoutes);

return $collection;
}

public function supports($resource, $type = null)
{
return $type === 'extra';
}
}

Что мне нужно знать, так это как получить имя среды для использования в функции load? Кажется, я не могу найти способ получить ядро ​​(что могло бы помочь).

Кто-нибудь может помочь? Спасибо!

0

Решение

Внедрение параметра — довольно простая операция. Вы могли бы хотеть занять некоторое время, чтобы исследовать контейнер обслуживания. http://symfony.com/doc/current/book/service_container.html

В любом случае:

// services.yml
services:
acme_demo.routing_loader:
class: Acme\DemoBundle\Routing\ApiRouteLoader
arguments: ['%kernel.environment%']
tags:
- { name: routing.loader }

class ApiRouteLoader extends Loader
{
protected $env;

public function __construct($env)
{
$this->env = $env;
}

Просто быстрое обновление, так как кто-то недавно проголосовал за это. Для более поздних версий Symfony, использующих переменные среды, используйте следующую команду для вставки текущего env:

Acme\DemoBundle\Routing\ApiRouteLoader:
$env:  '%env(APP_ENV)%'
2

Другие решения

Вы можете ввести kernel.environment параметр контейнера в ваш пользовательский загрузчик маршрутизации.

Кстати, почему вы создаете загрузчик маршрутизации, который не делает ничего, кроме загрузки файла маршрута по определенному пути? Вы можете просто импортировать этот путь в свой routing.yml файл:

api_routes:
resource: "@ApiBundle/Resources/config/routing.yml"
1

По вопросам рекламы [email protected]