Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP反向路由未按预期工作_Cakephp_Url Routing_Cakephp 1.3 - Fatal编程技术网

CakePHP反向路由未按预期工作

CakePHP反向路由未按预期工作,cakephp,url-routing,cakephp-1.3,Cakephp,Url Routing,Cakephp 1.3,我需要在我的应用程序中使用几个路由,以允许动态字符串继续使用前缀 这是我的路线: Router::connect('/:location/traveler/:controller/*', array('action' => 'index', 'traveler' => true, 'prefix' => 'traveler'), array('pass' => array('location'))); 例如,如果我转到/south/traveler/requests,它

我需要在我的应用程序中使用几个路由,以允许动态字符串继续使用前缀

这是我的路线:

Router::connect('/:location/traveler/:controller/*', array('action' => 'index', 'traveler' => true, 'prefix' => 'traveler'), array('pass' => array('location')));
例如,如果我转到/south/traveler/requests,它将成功路由到RequestsController::traveler\u索引($location='south')

这就是我想要的,但我还需要HtmlHelper::link()将URL数组正确地反向路由到该路由中

这是我对HtmlHelper::link()的调用:

前缀路由是(或应该是)隐含的,因为它是从旅行者前缀内的视图调用的

调用吐出的URL为:

http://domain.com/traveler/requests/location:south

我做得不对吗?是否有任何方法可以避免创建自定义路由类来正确反向路由这些URL数组?

您需要使用
router::connectNamed
通知路由器
location
应该是一个命名参数。见:

在创建自定义管线时,一个常见的陷阱是使用命名参数会破坏自定义管线。为了解决这个问题,您应该通知路由器哪些参数将被命名为参数。如果不了解这些信息,路由器将无法确定命名参数实际上是命名参数还是路由参数,并且默认情况下会假定它们是路由参数。要连接路由器中的命名参数,请使用router::connectNamed()

将确保您的章节和章节参数正确反转路线


您需要使用
router::connectNamed
通知路由器
location
应该是一个命名参数。见:

在创建自定义管线时,一个常见的陷阱是使用命名参数会破坏自定义管线。为了解决这个问题,您应该通知路由器哪些参数将被命名为参数。如果不了解这些信息,路由器将无法确定命名参数实际上是命名参数还是路由参数,并且默认情况下会假定它们是路由参数。要连接路由器中的命名参数,请使用router::connectNamed()

将确保您的章节和章节参数正确反转路线

我解决了这个问题

从routes.php中删除Router::ConnectName(),我修复了配置错误的路由

到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

我解决了这个问题

从routes.php中删除Router::ConnectName(),我修复了配置错误的路由

到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

我将以下路由放在routes.php中:
Router::connectNamed(array('location'))
并且它仍然反向路由到
http://domain.com/traveler/requests/location:south
现在,我一直在努力解决这个问题,我认为这个答案不太正确<代码>位置是一个路由参数。问题是,如果向URL添加命名参数,那么它也会将位置视为命名参数。因此,
['controller'=>'请求','action'=>'编辑','location'=>'南','baggage'=>1234]
将中断并返回到
/traveler/requests/edit/location:south/baggage:1234
。但是,当您拥有此URL时,您可以指定
Router::connectNamed(array('baggage'))
,并且该数组可以正确反向路由。我将以下内容放在routes.php中的所有路由之上:
Router::connectNamed(array('location'))
并且它仍然反向路由到
http://domain.com/traveler/requests/location:south
现在,我已经经历了一些痛苦,试图弄明白这一点,我相信这个答案并不完全正确<代码>位置是一个路由参数。问题是,如果向URL添加命名参数,那么它也会将位置视为命名参数。因此,
['controller'=>'请求','action'=>'编辑','location'=>'南','baggage'=>1234]
将中断并返回到
/traveler/requests/edit/location:south/baggage:1234
。但是,当您有此URL时,您可以指定
Router::connectNamed(array('baggage'))
,并且该数组可以正确反向路由。当我遇到此问题时
/south/traveler/requests/edit/1234
将起作用,但是类似于
/south/traveler/requests/edit/baggage:1234
的操作将失败,您将返回
/traveler/requests/edit/location:south/baggage:1234
。解决这个问题的方法是处理命名参数的反向路由。当我遇到这个问题时,
/south/traveler/requests/edit/1234
可以工作,但是类似于
/south/traveler/requests/edit/baggage:1234
的东西将失败,您将返回到
/traveler/requests/edit/location:south/baggage:1234
。解决方法是处理命名参数的反向路由。
$this->Html->link('Edit Details', array('controller' => 'requests', 'action' => 'edit', 'location' => 'south', 1234));