路由
Symfony CMF 路由组件扩展了 Symfony 核心路由组件,以提供更大的灵活性。最重要的区别在于 CMF 路由组件可以从数据库加载路由信息。
提示
本章提供关于 Symfony CMF 路由实现的背景信息。如果您只是想在 CMF 中使用路由,请阅读 RoutingBundle。如果您想自定义路由的工作方式,请继续阅读本章。
与 Symfony 路由组件一样,CMF 路由组件也不需要完整的 Symfony 框架,也可以在独立项目中使用。
Symfony CMF 路由组件的核心是 ChainRouter。ChainRouter 尝试将请求与每个已注册的路由器进行匹配,忽略 ResourceNotFoundException,直到所有路由器都有机会进行匹配。第一个匹配获胜 - 如果没有路由器匹配,则抛出 ResourceNotFoundException 异常。默认的 Symfony 路由器可以添加到此链中,因此除了任何自定义路由之外,仍然可以使用标准路由机制。
此外,此组件还提供了 DynamicRouter。此路由器比 Symfony 核心路由器更可配置和灵活。它可以配置为从数据库加载路由,动态地向路由添加信息,以及从模型类生成 URL。
路由的目标
路由是框架的任务,它基于 Web 请求来确定必须调用的代码以及要应用的参数。Symfony 核心 RequestMatcherInterface 定义了路由器必须将 Request 转换为路由信息数组。在完整堆栈的 Symfony 框架中,要调用的代码在匹配参数的 _controller
字段中定义。框架将调用指定的控制器,通过名称将该方法的最终参数与匹配数组或 Request
对象属性字段中找到的其他参数进行匹配。
注意
有关 Symfony 框架中路由的良好介绍,请阅读 Symfony 书籍的路由章节。
要在 Symfony 框架上下文之外使用此组件,请查看核心 Symfony 路由组件,以获得对该组件的基本理解。CMF 路由组件只是扩展了基本行为。
安装
您可以使用 composer 通过 symfony-cmf/routing 包来安装此组件。如果您正在使用 symfony-cmf/routing-bundle
,则无需单独指定该组件,它会自动被要求安装。
Symfony 集成
如前所述,此组件旨在独立于 Symfony 框架使用。但是,如果您希望将其用作 Symfony CMF 项目的一部分,也可以使用集成 bundle。阅读更多关于 RoutingBundle 的信息。