如何在Symfony2中获取自定义路由加载器中的环境?

时间:2014-10-02 09:10:35

标签: php symfony symfony-2.4

我为我的包创建了一个自定义加载器,目的是为每个环境加载不同的路由。我的加载器类看起来像这样:

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

我需要知道的是如何在“加载”功能中获取要使用的环境名称?我似乎无法找到获取内核的方法(这会有所帮助)。

有人可以帮忙吗?谢谢!

2 个答案:

答案 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"
相关问题