我有没有想要创建动态自定义路由?目标是允许用户指定他们想要路由到任何控制器/视图/结构的任何URL。
如果用户想要创建如下内容:
/a_quick_brown_fox => foxes/view/42
/jumps_over => actions/view/42
/lazy_dog => dogs/view/42
未来还有很多其他人无需编辑routes.php我不确定可能的解决方案。
我希望允许用户输入类似下面的内容
Custom URL => [ ]
Controller => [ ]
ID for View => [ ]
我会将它存储在一个表中以允许进行唯一的URL检查,而不是。为了允许新控制器的可扩展性,我可以使用诸如/l/<slug>
然后,我希望插入一些代码,这些代码将从表中检索自定义URL并允许路由。它可能吗?有人做过吗?
答案 0 :(得分:1)
我不确定您是否可以按照建议将其直接定义到路由系统中,但是您可以这样做。
首先明确定义所有应用程序控制器/操作,以便用户不会覆盖它们。
然后定义一个捕获将路由到您选择的控制器的所有路径
//default routes
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
//other
//custom route
Router::connect('/*', array('controller' => 'routes', 'action' => 'custom'));
你的routes_controller / custom_action将接收url包含的任何参数,只需从那里查找数据库并重定向到数据库中定义的正确路由。
function custom() {
//get values via $this->params
}
答案 1 :(得分:0)
您可以创建自定义路由类,但我认为您无法访问其中的POST数据(如果这足够,您可以访问GET数据和缓存)。可能最简单的方法是在控制器中重定向。
答案 2 :(得分:0)
最简单的方法是让路由控制器保存新路由并缓存已保存的路由。每次添加新路由时,请刷新缓存并再次保存。
然后创建一个自定义Route类,它将拉出缓存条目并在routes.php中处理它们