【问题标题】:Consolidate CakePHP routes合并 CakePHP 路由
【发布时间】:2011-07-21 13:44:03
【问题描述】:

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

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

【问题讨论】:

  • Router::connect('/manufacturer/:manufacturer/:friendly0/*
  • 很遗憾,这行不通,因为我有很多“友谊”需要传递给行动。

标签: cakephp routing


【解决方案1】:

其实——你不需要使用那么多规则:

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
)

【讨论】:

  • 我没有忽视你,今天要检查一下。感谢您的回复
  • 感谢您的帮助,不知道为什么我把事情搞得这么复杂。踏踏实实,干杯
【解决方案2】:

不要使用 ':friendly0',':friendly1',':friendly2' 等。这会使它们成为 url 数组中的键。这就是为什么您需要在 'pass' 数组中再次传递它们。

Shaz 的建议是对的:

Router::connect('/manufacturer/*', array('controller'=>'categories', 'action'=>'view'));

如果你以你现在的方式传递它们,它将是你的 view() 函数中可变数量的参数。查看 pages_controller 以了解它是如何处理的。但我建议改用命名参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 2012-08-17
    • 2012-08-13
    • 2011-06-09
    • 2012-03-03
    • 2013-12-13
    • 2012-11-28
    相关资源
    最近更新 更多