无法从Bundles自动加载路由

时间:2014-08-03 15:13:50

标签: php symfony routing bundle autoload

我有一个问题wuth自动加载来自bundle的路由。我在文件夹中有routing.yml文件:Bundle \ UsersBundle \ Resources \ config。正如他们在Symfony食谱中所说的那样加载路线(http://symfony.com/doc/current/cookbook/routing/custom_route_loader.html)。这一切都适用于一个捆绑但但当我向AppKernel添加另一个捆绑时,它不会加载新的路由。看起来每个bundle都需要在主routing.yml中单独输入(这正是我不想要的)。每个RoutesLoader服务都设置了正确的标签,容器正在正确加载此服务。

routing.yml:(这个配置有效,但它需要来自另一个bundle的RouteLoader必须返回另一个类型 - “bundle_routes_2” - 当它返回“bundle_routes”路由未加载时)

bundles_routes:
    resource: .
    type: bundle_routes

bundles_routes_2:
    resource: .
    type: bundle_routes_2

更具体 - 例如我有3个捆绑包 - UsersBundle,PermissionsBundle和GroupsBundle。每个bundle都在其Resources文件夹中有路由( bundle_folder /Resources/config/routing.yml)。每个bundle都有RoutesLoader类,如下所示:

<?php

namespace Acme\UsersBundle\Routing;

use Symfony\Component\Config\Loader\Loader;
use Symfony\Component\Routing\RouteCollection;

class UsersRoutesLoader extends Loader
{
    public function load($resource, $type = null)
    {
        $collection = new RouteCollection();
        $resource = "@AcmeUsersBundle/Resources/config/routing.yml";
        $type = "yaml";
        $importedRoutes = $this->import($resource, $type);
        $collection->addCollection($importedRoutes);
        return $collection;
    }

    public function supports($resource, $type = null)
    {
        return $type === "bundle_routes";
    }
}

主路由文件看起来像:

acme_bundles_routes:
    resource: .
    type: bundle_routes

但它仅适用于一个捆绑包。我必须将routing.yml更改为:

acme_bundles_routes:
        resource: .
        type: bundle_routes
acme_bundles_routes_2:
        resource: .
        type: bundle_routes_2
acme_bundles_routes_3:
        resource: .
        type: bundle_routes_3

每个RoutesLoader都必须返回对应类型。

1 个答案:

答案 0 :(得分:0)

为什么需要自定义加载程序?

请参阅http://symfony.com/doc/current/book/routing.html#routing-include-external-resources

您的父routing.yml应该包含:

AcmeBundle:
    resource: "@AcmeBundle/Resources/config/routing.yml"

由于您希望拥有各种路由文件,因此可以(在routing.yml中):

admin_routes:
    resource: "@AcmeBundle/Resource/config/routes/admin.yml"
user_routes:
    resource: "@AcmeBundle/Resource/config/routes/user.yml"

依此类推。在任何这些包yml文件中,您都包含路径定义。