Я создал собственный загрузчик для своего пакета с целью загрузки различных маршрутов для каждой среды. Мой класс загрузчика выглядит так:
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? Кажется, я не могу найти способ получить ядро (что могло бы помочь).
Кто-нибудь может помочь? Спасибо!
Внедрение параметра — довольно простая операция. Вы могли бы хотеть занять некоторое время, чтобы исследовать контейнер обслуживания. 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)%'
Вы можете ввести kernel.environment
параметр контейнера в ваш пользовательский загрузчик маршрутизации.
Кстати, почему вы создаете загрузчик маршрутизации, который не делает ничего, кроме загрузки файла маршрута по определенному пути? Вы можете просто импортировать этот путь в свой routing.yml
файл:
api_routes:
resource: "@ApiBundle/Resources/config/routing.yml"