更多的/**
是用于解析,而不是用于匹配。解析是当您获取 url 的字符串版本并将其转换为 Cake 用来指向资源的数组时,而匹配是获取基于数组的 url 并根据您的路由转换为字符串。
Router::connect(
'/view/**',
array('controller' => 'thing', 'action' => 'view')
);
// input
Router::parse('/view/something/here/for/you');
// output
array(
'controller' => 'thing',
'action' => 'view',
'pass' => array('something/here/for/you'),
'named' => array()
);
// input
Router::url(array(
'controller' => 'thing',
'action' => 'view',
'something',
'here'
));
// output
/view/something/heresomething/here
// input
Router::url(array(
'controller' => 'thing',
'action' => 'view',
'something/here'
));
// output
/view/something%2Fheresomething%2Fhere
第二个和第三个例子显然是不对的。估计是路由器的BUG 即使它正确构造了 url,也无法解析它,因为它/**
会变成something/heresomething/here
单个传递的参数。
作为一种解决方法,您可以排除所有传递的参数并将其添加到您的链接中:
$url = Router::url(array('controller' => 'thing', 'action' => 'view'));
$this->Html->link(
'title here',
$url . 'abc/def'
));
// ends up: /view/abc/def
然后abc/def
将被解析为单个传递的参数。