CakePHP 2.0 Router :: connect如何传递命名参数

时间:2012-02-11 02:46:56

标签: cakephp cakephp-2.0

我正在重建CakePHP 2.0中的一个站点,需要将一些旧URL路由到新的URL。例如,这个:

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仍然以相同的方式传递 - 而不是作为命名参数传递。

有谁知道正确的语法?

1 个答案:

答案 0 :(得分:1)

在提交机票并获得响应后,机票无效,这迫使我深入挖掘。我终于明白了需要做些什么。由于入站URL不包含命名参数,因此无法按照您尝试的方式建立路由连接。路由连接用作关于如何将某些位置路由到新位置的模板。但是,您要做的是将特定URL路由到新URL。您正在寻找的是重定向。

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

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