Cakephp路由没有给出正确的结果

时间:2012-09-12 15:51:14

标签: cakephp

我正在使用cakephp 1.3。这是我的问题:

我有一个名为“learns”的控制器和一个名为“classroom”的方法。

要访问教室方法,我使用以下链接:http://www.url.com/learns/classroom/15

我希望它像这样:http://www.url.com/class/15

这就是我设置路线的方式:

Router::connect('/:class/:id', array('controller' => 'learns', 'action' => 'classroom'), array('id' => '[0-9]+'));

我真的不知道为什么它不起作用。我仔细阅读了文档,然后从教程书中复制了这个解决方案..

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我没有看到您的Router语句有任何问题。虽然我不确定你是否真的想要 /:class /:id 而不是“ / class /:id ”。看到不同?第二版中没有冒号。

这告诉路由器任何以/ class / [an-id]开头的请求都应该映射到你的规则。将它作为/:class表示你将一个参数传递给路由器。它可以是任何 / foo / 15 / bar / 15 ,这些参数将在您的 $ this-&gt; params ['class'] < / strong>和 $ this-&gt; params ['id'] 。,假设此规则 - &gt;的 /:类/:ID

在你的问题中,你说“我真的不知道为什么它不起作用”。请避免这些陈述,因为它没有说明实际问题。

请告诉我们您的期望是什么?那你看到了什么?这是一个错误吗?还是警告?如果您完全看到其他内容,例如执行了不同的操作,则可能是由于路由器实际工作的原因。如果你有一条贪婪的路线和正常的路线:

/ users / *和 /用户/:ID

第二个网址不会与任何请求匹配,因为/ users / *是贪婪并且会占用所有请求,除非第一个路由规则返回false。

如果这是你的情况,我建议你阅读如何编写自定义路线类。总而言之,自定义路由类试图使贪婪路线不那么贪婪。为了更好地解释,这是一篇标记故事的优秀文章:http://mark-story.com/posts/view/using-custom-route-classes-in-cakephp

cakephp中的路由是最令人困惑的主题之一,可能需要一段时间才能解决它。 Cookbook是你最好的朋友。读取并重新读取所有内容,直到您确定每个路由元素在路由规则中的作用。