合并CakePHP路由

时间:2011-07-21 13:44:04

标签: cakephp routing

有没有办法将以下规则合并为一条规则?

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')));

2 个答案:

答案 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以了解它是如何处理的。但我建议改用命名参数。