跳到内容

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 标签的说明

延伸阅读

有关 Symfony CMF 中路由的更多信息,请参阅

这项工作,包括代码示例,均根据 Creative Commons BY-SA 3.0 许可获得许可。
目录
    版本