我为我的包创建了一个自定义加载器,目的是为每个环境加载不同的路由。我的加载器类看起来像这样:
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';
}
}
我需要知道的是如何在“加载”功能中获取要使用的环境名称?我似乎无法找到获取内核的方法(这会有所帮助)。
有人可以帮忙吗?谢谢!
答案 0 :(得分:2)
注入参数是一项非常基本的操作。您可能需要花一些时间来研究服务容器。 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)%'
答案 1 :(得分:1)
您可以将kernel.environment
容器参数注入自定义路由加载器。
顺便问一下,为什么要创建一个路由加载器,除了从特定路径加载路由文件之外什么都不做?您可以将该路径简单地导入routing.yml
文件:
api_routes:
resource: "@ApiBundle/Resources/config/routing.yml"