如何解决CakePHP反向路由未按预期运行
| 我的应用程序中需要一些路由,以允许动态字符串继续前缀。 这是我的路线:Router::connect(\'/:location/traveler/:controller/*\',array(\'action\' => \'index\',\'traveler\' => true,\'prefix\' => \'traveler\'),array(\'pass\' => array(\'location\')));
例如,如果我转到/ south / traveler / requests,它将成功路由到RequestsController :: traveler_index($ location = \'south \')。
这就是我想要的,但我还需要HtmlHelper :: link()才能将URL数组正确地反向路由到该路由中。
这是我对HtmlHelper :: link()的调用:
$this->Html->link(\'List Requests\',array(\'controller\' => \'requests\',\'action\' => \'index\',\'location\' => \'south\'));
前缀路由是(或应该)隐含的,因为这是从旅行者前缀中的视图调用的。
发出呼叫的网址是:
http://domain.com/traveler/requests/location:south
我做错了什么吗?有什么方法可以避免创建自定义路由类来正确地反向路由这些URL数组?
解决方法
您需要通知路由器“ 3”应该是使用“ 4”的命名参数。请参见CakePHP v1.3书的“命名参数”部分:
URL: /contents/view/chapter:models/section:associations
进行自定义路由时,常见的陷阱是使用命名参数会破坏自定义路由。为了解决这个问题,您应该通知路由器哪些参数将被命名为参数。在不了解这一点的情况下,路由器无法确定命名参数实际上是命名参数还是路由参数,并且默认情况下假定您希望将它们作为路由参数。要在路由器中连接命名参数,请使用Router :: connectNamed()。
Router::connectNamed(array(\'chapter\',\'section\'));
将确保您的章和节参数正确地反向路由。
,我解决了问题。
从routes.php中删除Router :: connectNamed(),我修复了配置错误的路由。
使用上面列出的路由,到traveler_index()的反向路由可以正常工作,但是对任何其他函数的调用(例如traveler_edit())都将失败。
使用下面的路线,我可以使它对走行者前缀中任何控制器上的任何动作(位置为变量)的路线进行反向转换。
Router::connect(\'/:location/traveler/:controller/:action/*\',array(\'traveler\' => true,\'prefix\' => \'traveler\'),array(\'pass\' => array(\'location\')));
现在,我对HtmlHelper :: link()的调用正确地反向路由了我的URL数组:
$this->Html->link(\'Edit Details\',array(\'controller\' => \'requests\',\'action\' => \'edit\',\'location\' => \'south\',1234));
...反向路由到/ south / traveler / requests / edit / 1234。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。