cakephp中的路由不按预期工作

时间:2013-12-10 17:30:16

标签: php cakephp

我有一个MessageController,我希望用户能够访问messages / add / action,将id作为变量传递,即messages / add / 5,但是这个id在url中不可见。

根据我的阅读,我相信以下内容应该有效:

Router::connect('/messages/add/*', array('controller' => 'messages', 'action' => 'add'));

我的理解是,在任何有消息/添加/ 5链接的地方,它都会显示为消息链接/添加/当用户访问消息/添加/ 5时,它应该在地址栏中显示为消息/添加/。这对我不起作用。

我不理解或我做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

这不是路线的运作方式。如果你这样做

Router::connect('/messages/add/*', array('controller' => 'messages', 'action' => 'add'));

这意味着任何具有此模式 / messages / add / * 的网址都会被重定向到MessagesController中的添加操作(没有变量)。

如果你想传递id变量而不在地址栏中显示它,你的选择是通过POST传递它。或者,您可以使用ajax来调用该URL,但是任何拥有浏览器控制台的人都可以查看该URL并访问它(如果您没有适当的安全性)。

routes.php的要点是将地址栏中的任何url与connect数组的第一个参数中的模式集匹配,并将其指向指定的操作。路由器决不会更改地址栏设置路由。

[编辑]:其他选项是传递slug或hash而不是plain id。这一切都取决于你想做什么以及你喜欢做什么。如果你只想在阅读邮件时不明显地显示id,那么哈希它或加密它。如果add动作是添加消息(这就是我认为的那样),那么你不应该首先在url中将表单参数作为GET变量传递。