我有一个问题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都必须返回对应类型。
答案 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文件中,您都包含路径定义。