RoutingBundle
The RoutingBundle 使用 CMF Routing 组件将动态路由集成到 Symfony 中。 请参阅组件文档,如果你对本章中解释的服务的实现细节感兴趣。
ChainRouter
旨在取代默认的 Symfony 路由器。 它所做的只是管理一个优先级的路由器列表,并尝试使用所有路由器来匹配请求和生成 URL。 当然,链中的路由器之一可以是默认路由器,因此你仍然可以使用 Symfony 标准方式在有意义的地方指定路由。
此外,此扩展包提供了有用的路由器实现。 它提供了 DynamicRouter
,它基于 Symfony Route 对象的自定义加载器逻辑进行路由。 提供程序可以使用数据库来实现。 此扩展包为 Doctrine PHPCR-ODM 和 Doctrine ORM 提供了默认实现。
DynamicRouter 服务仅在应用程序配置中显式启用时才可用。
最后,此扩展包为 Doctrine PHPCR-ODM 和 ORM 提供了路由文档,以及用于重定向路由的控制器。
安装
你可以使用 composer 通过 symfony-cmf/routing-bundle 软件包安装此扩展包。
ChainRouter
ChainRouter 可以用链式启用的实现来替换默认的 Symfony 路由系统。 它本身不路由任何内容,而只是循环遍历所有链式路由器。 为了处理标准配置的 Symfony 路由,可以将服务名称为 router.default
的 Symfony 默认路由器放入链中。
你可以配置要在链中使用的路由服务,请参阅配置参考。
使用标签加载路由器
你可以使用服务标签 router
来自动注册你的路由器。 该标签有一个可选的 priority
属性。 优先级越高,你的路由器越早被要求匹配路由。 如果你没有指定优先级,你的路由器将排在最后。 如果有多个具有相同优先级的路由器,则它们之间的顺序是不确定的。 标记的服务将如下所示
1 2 3 4 5 6
# app/config/services.yaml
services:
app.my_router:
class: AppBundle\Routing\MyRouter
tags:
- { name: router, priority: 300 }
另请参阅 Symfony 官方文档关于 DependencyInjection 标签的说明