有没有办法将以下规则合并为一条规则?
Router::connect('/manufacturer/:manufacturer/:friendly0', array('controller'=>'categories', 'action'=>'view'), array('pass'=>array('manufacturer', 'friendly0')));
Router::connect('/manufacturer/:manufacturer/:friendly0/:friendly1', array('controller'=>'categories', 'action'=>'view'), array('pass'=>array('manufacturer', 'friendly0', 'friendly1')));
Router::connect('/manufacturer/:manufacturer/:friendly0/:friendly1/:friendly2', array('controller'=>'categories', 'action'=>'view'), array('pass'=>array('manufacturer', 'friendly0', 'friendly1', 'friendly2')));
Router::connect('/manufacturer/:manufacturer/:friendly0/:friendly1/:friendly2/:friendly3', array('controller'=>'categories', 'action'=>'view'), array('pass'=>array('manufacturer', 'friendly0', 'friendly1', 'friendly2', 'friendly3')));
Router::connect('/manufacturer/:manufacturer/:friendly0/:friendly1/:friendly2/:friendly3/:friendly4', array('controller'=>'categories', 'action'=>'view'), array('pass'=>array('manufacturer', 'friendly0', 'friendly1', 'friendly2', 'friendly3', 'friendly4')));
答案 0 :(得分:2)
实际上 - 您不需要使用那么多规则:
http://book.cakephp.org/view/945/Routes-Configuration
基本上当有人浏览到yoursite.com/manufacturer时 - 将调用制造商控制器,并且由于未定义操作 - 它将默认为索引。所以你能做的只是:
Router::connect('/manufacturer/*', array('controller' => 'categories', 'action' => 'view'));
现在当有人浏览yoursite.com/manufacturer时 - 请求被转发到类别控制器,调用查看操作。 '/ *'确保任何其他参数也在那里转发。
所以当有人访问yoursite.com/manufacturer/iamfriendly/iamfriendlytoo时 - 你可以通过
获取那些通过参数/变量的人$this->params['pass']
或者:
$this->passedArgs
给你以下数组:
Array
(
[0] => iamfriendly
[1] => iamfriendlytoo
)
您可以使用命名参数进一步增强此功能,因此您会收到以下内容:
Array
(
['manufacturer'] => iamfriendly
['friendly0'] => iamfriendlytoo
)
答案 1 :(得分:0)
不要使用':friendly0',':friendly1',':friendly2'等。它使它们成为你的url数组中的键。这就是你需要在'pass'数组中再次传递它们的原因。
Shaz的建议是对的:
Router::connect('/manufacturer/*', array('controller'=>'categories', 'action'=>'view'));
如果你按照现在的方式传递它们,它将是view()函数中可变数量的参数。查看pages_controller以了解它是如何处理的。但我建议改用命名参数。