从数据库查找路由:Symfony CMF DynamicRouter
核心的Symfony路由系统善于处理复杂的路由设置。在部署过程中,一个高度优化的路由缓存被剥离出来。
然而,在工作中处理大量数据时,每个数据各自都需要一个美观可读的URL(为了达到搜索引擎优化的目的),路由系统会被拖慢。此外,如果路由需要被用户编辑,路由缓存将频繁地被重建。
针对这类状况 ,DynamicRouter
提供了另一种解决方法:
路由存储在数据库中;
路径字段上有一个数据库索引,用于查找数量庞大的不同的路由;
写入动作只影响到数据库的索引,而索引是非常高效的。
当所有路由都在部署期间被明确,并且数量并不是很大时,使用一个自定义路由加载程序是添加更多路由的首选方式。当只操作某一类型的对象时,使用对象的slug参数或者@ParamConverter
注释,就可以很好地解决问题了(参考 FrameworkExtraBundle)。
当你需要的Route
对象要具备Symfony完整特性时,DynamicRouter
是非常有用的。每一个路由可以定义一个特定的控制器,这样你就可以从程序逻辑中分离出URL结构。
DynamicRouter内置了对Doctrine ORM和Doctrine PHPCR-ODM的支持,但还提供了ContentRepositoryInterface
用于编写一个自定义的路由加载器(custom loader),比如针对其他数据库类型,或者是一个REST API,乃至别的什么。
在Symfony CMF文档中有DynamicRouter的解释。