【发布时间】:2013-01-28 17:07:37
【问题描述】:
上一个问题的延续:Custom lithium routing scenario
注意:这是特定于Lithium Framework
问题
我继承了一个 URL 方案,它实际上没有任何约定来区分页面、项目和类别。所以,我有一个非常通用的路由器,它可以传递给一个包罗万象的控制器。
这个包罗万象的控制器 (PagesController) 使用 url 作为键从数据库中检索页面类型。然后 PagesController 运行方法并根据页面类型选择模板。我将这些信息无限期地存储在 Memcached 中,因此查找速度非常快。
然而,随着越来越多的页面类型开始发挥作用,我可以看到这个控制器变得过于臃肿和不灵活。理想情况下,我想将不同的页面类型分解为它们自己的控制器。
解决方案?
是否有可能有一个路由方案来检查数据库以确定正确的控制器?
我的第一个想法是继承lithium\net\http\Router 并在Router::connect() 和Router::_parseController() 中使用自定义逻辑。
如果可以在 bootstrap\routes.php 中查询数据库并根据结果创建一个新的lithium\net\http\Route 对象,那就太好了。然后,只需将其传递给Router::connect()。这似乎是一个可怕的 hack。
无论如何,Router::connect() 在其设计中并不意味着 是动态的。
【问题讨论】:
标签: php refactoring url-routing lithium