CakePHP - 自定义路径控制器

时间:2011-09-26 04:36:21

标签: cakephp routes cakephp-1.3 url-routing

我有没有想要创建动态自定义路由?目标是允许用户指定他们想要路由到任何控制器/视图/结构的任何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>

之类的slug前缀

然后,我希望插入一些代码,这些代码将从表中检索自定义URL并允许路由。它可能吗?有人做过吗?

3 个答案:

答案 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中处理它们