2012-02-11 84 views
0

我正在CakePHP 2.0中重建一个站点,并需要将一些旧URL路由到新路径。例如,这样的:CakePHP 2.0路由器::连接如何传递命名参数

http://www.example.com/widget/helpbox/location/mackay-qld

将路由到这一点:

http://www.example.com/widgets/answer/location_id:10542

为了做到这一点,我有以下途径:

Router::connect(
    '/widget/helpbox/location/mackay-qld', 
    array(
     'controller' => 'widgets', 
     'action' => 'answer', 
     'location_id' => 10542 
    ) 
); 

当我调试$ this-> request-> params,我得到这个:

Array 
(
    [plugin] => 
    [controller] => widgets 
    [action] => answer 
    [named] => Array 
     (
     ) 

    [pass] => Array 
     (
     ) 

    [location_id] => 10542 
    [isAjax] => 
) 

但我相信这一点:

Array 
(
    [plugin] => 
    [controller] => widgets 
    [action] => answer 
    [named] => Array 
     (
      [location_id] => 10542 
     ) 

    [pass] => Array 
     (
     ) 

    [isAjax] => 
) 

我也打过电话

Router::connectNamed(array('location_id')); 

...但无济于事。 location_id仍然以相同的方式传递 - 而不是一个命名参数。

有谁知道正确的语法?

+0

这可能是一个错误。考虑询问/报告给Cake2家伙。分别是http://ask.cakephp.org/和http://cakephp.lighthouseapp.com/dashboard。 – sibidiba 2012-02-11 12:33:20

回答

1

在提交一张票并得到一个响应作为票无效后,它迫使我深入一点。我终于明白需要做什么。由于入站URL不包含命名参数,因此无法按照您尝试执行的方式进行路由连接。路线连接用作如何将特定位置路由到新位置的模板。但是,您要做的是将特定的URL路由到新的URL。你正在寻找的是重定向。

Router::redirect(
    '/widget/helpbox/location/mackay-qld', 
    array(
     'controller' => 'widgets', 
     'action' => 'answer', 
     'location_id' => 10542, 
    ), 
); 

这应该会返回您正在查找的结果。

+0

许多人非常感谢@cdburgess。完美工作! – 2012-02-14 11:05:10

+0

很高兴听到! Mark Story将我的错误设置为无效,从而使我走上正确的道路。大声笑。但我很高兴它适合你。 – 2012-02-14 18:09:32