2011-09-26 259 views
2

是否有我创建动态自定义路由?目标是允许用户指定他们想要路由到任何控制器/视图/结构的任何URL。CakePHP - 自定义路由控制器

如果用户希望创建如下东西:无需

/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检查,并没有什么。为了让新控制器具有可扩展性,我可以使用前缀代替slu such如/l/<slug>

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

+0

所以,你想有一个页面上的表单,将用户重定向到指定页面的routes.php文件?或者用户在哪里输入内容? – JJJ

+0

我相信我没有说明我会如何处理POST数据。我在代码块后面进行了编辑。 – mmhan

回答

0

最简单的方法是让路由控制器保存新路由并缓存保存的路由。每次添加新路由时,都需要刷新缓存并再次保存。

然后创建一个自定义的路由类,将拉动缓存条目并处理它们在

0

您可以创建自定义路由类,但我不认为您有权访问其中的POST数据(如果够用,您可以访问GET数据和缓存)。可能最简单的方法是在控制器中重定向。

+0

请查看我编辑的问题。我希望通过普通的控制器将POST数据存储到表中。并使用存储的表数据创建路由。 – mmhan

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 
} 
+0

我非常喜欢它的路线/习惯/。但它仍然没有达到由于重定向而产生“漂亮url”的结果。 – mmhan

+1

啊是的,它不会保留它来的网址。你看过这个吗? :http://mark-story.com/posts/view/using-custom-route-classes-in-cakephp – JohnP

+0

哦..谢谢,请检查一下。 – mmhan