2013-07-31 214 views
1

在我的CakePHP 2.3應用程序中,我想example.com/come/Harry重定向example.com/myworks/people/HarryCakePHP重定向路由

這有效,但這是連接。

Router::connect ('/come/:myname', 
    array('controller' => 'myworks', 'action' => 'people'), 
    array(
     'pass' => array('myname') 
    ) 
); 

我需要301重定向。我嘗試這樣做:

Router::redirect ('/come/:myname', 
    array('controller' => 'myworks', 'action' => 'people'), 
    array(
     'pass' => array('myname') 
    ) 
); 

但它重定向到example.com/myworks/people/。如何在重定向時將參數傳遞給我的操作?

回答

4

the documentation要使用persist而非pass的重定向。此代碼應該工作,只要你想:

Router::redirect ('/come/*', 
    array('controller' => 'myworks', 'action' => 'people', 
      '?' => array('processed' => 1)), 
    array(
     'persist' => array('myname') 
    ) 
); 

的原因是因爲你生成一個新的URL時,重定向:

  • 用於定義該路由參數應該將 轉移到pass數組中。添加要傳遞的參數將從常規路由數組中刪除它 。防爆。 「通」 =>數組(「蛞蝓」)
  • 堅持是用來定義路由參數應該是自動生成新網址當包括 。您可以通過 覆蓋持久參數在url中重新定義它們,或者通過將參數設置爲 false將其刪除。防爆。 '堅持'=>數組( '郎')
+0

這工作得很好:) – trante

+0

是否有可能向URL添加靜態查詢字符串?例如,我想將'''?processed = 1'''添加到最終的URL。 – trante

+1

@trante補充說,我的回答。 –

0

你幾乎在那裏,但你需要定義你的命名參數,以便蛋糕知道url是有效的。

參考,http://book.cakephp.org/2.0/en/development/routing.html#passing-parameters-to-action

Router::redirect (
    '/come/:myname', 
    array('controller' => 'myworks', 'action' => 'people'), 
    array(
     'myname' => '[a-z]+', 
     'pass' => array('myname'), 
     'status' => '301' 
    ), 
); 
+0

我插入下殼體詞爲 「MYNAME」。但是這也重定向到''''example.com/myworks/people /''' – trante

+0

當我嘗試「Router :: connect」時,它可以工作,但「Router :: redirect」不起作用。 – trante

0

使用以下代碼

Router::redirect ('/come/*', 
    array('controller' => 'myworks', 'action' => 'people'), 
    array('params' => '[a-zA-Z0-9]+') 
); 
+0

你嘗試過這種單衣嗎?這不起作用。 – trante