2012-02-11 75 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