我有一个MessageController,我希望用户能够访问messages / add / action,将id作为变量传递,即messages / add / 5,但是这个id在url中不可见。
根据我的阅读,我相信以下内容应该有效:
Router::connect('/messages/add/*', array('controller' => 'messages', 'action' => 'add'));
我的理解是,在任何有消息/添加/ 5链接的地方,它都会显示为消息链接/添加/当用户访问消息/添加/ 5时,它应该在地址栏中显示为消息/添加/。这对我不起作用。
我不理解或我做错了吗?
谢谢!
答案 0 :(得分:1)
这不是路线的运作方式。如果你这样做
Router::connect('/messages/add/*', array('controller' => 'messages', 'action' => 'add'));
这意味着任何具有此模式
如果你想传递id变量而不在地址栏中显示它,你的选择是通过POST传递它。或者,您可以使用ajax来调用该URL,但是任何拥有浏览器控制台的人都可以查看该URL并访问它(如果您没有适当的安全性)。
routes.php
的要点是将地址栏中的任何url与connect数组的第一个参数中的模式集匹配,并将其指向指定的操作。路由器决不会更改地址栏设置路由。
[编辑]:其他选项是传递slug或hash而不是plain id。这一切都取决于你想做什么以及你喜欢做什么。如果你只想在阅读邮件时不明显地显示id,那么哈希它或加密它。如果add动作是添加消息(这就是我认为的那样),那么你不应该首先在url中将表单参数作为GET变量传递。