从数据库查找路由:Symfony CMF DynamicRouter

3.4 版本
维护中的版本

核心的Symfony路由系统善于处理复杂的路由设置。在部署过程中,一个高度优化的路由缓存被剥离出来。

然而,在工作中处理大量数据时,每个数据各自都需要一个美观可读的URL(为了达到搜索引擎优化的目的),路由系统会被拖慢。此外,如果路由需要被用户编辑,路由缓存将频繁地被重建。

针对这类状况 ,DynamicRouter 提供了另一种解决方法:

  • 路由存储在数据库中;

  • 路径字段上有一个数据库索引,用于查找数量庞大的不同的路由;

  • 写入动作只影响到数据库的索引,而索引是非常高效的。

当所有路由都在部署期间被明确,并且数量并不是很大时,使用一个自定义路由加载程序是添加更多路由的首选方式。当只操作某一类型的对象时,使用对象的slug参数或者@ParamConverter 注释,就可以很好地解决问题了(参考 FrameworkExtraBundle)。

当你需要的Route对象要具备Symfony完整特性时,DynamicRouter 是非常有用的。每一个路由可以定义一个特定的控制器,这样你就可以从程序逻辑中分离出URL结构。

DynamicRouter内置了对Doctrine ORM和Doctrine PHPCR-ODM的支持,但还提供了ContentRepositoryInterface用于编写一个自定义的路由加载器(custom loader),比如针对其他数据库类型,或者是一个REST API,乃至别的什么。

Symfony CMF文档中有DynamicRouter的解释。

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)