2013-07-24 53 views
2

我想在CakePHP中,以/my-old-url/$slug重定向到/news/$slug用下面的代碼:(?可能是一個bug)CakePHP的:通過路由器::重定向重定向不保留PARAMS

Router::redirect(
    '/my-old-url/*', 
    array('controller' => 'news', 'action' => 'view'), 
    array('persist' => true) 
); 

使用此代碼拋出錯誤

警告(2):提供的foreach()[CORE /蛋糕/路由/路由/ CakeRoute.php,線381]參數無效

public function persistParams($url, $params) { 
    foreach ($this->options['persist'] as $persistKey) { 

即使嘗試下面的代碼不起作用:

Router::redirect(
    '/my-old-url/:slug', 
    array('controller' => 'news', 'action' => 'view'), 
    array('persist' => array('slug')) 
); 

此代碼重定向我對/news/view不帶任何參數。

我用下面的代碼來連接新聞網址:

Router::connect('/news', 
    array('controller' => 'news', 'action' => 'index') 
); 
Router::connect('/news/:slug', 
    array('controller' => 'news', 'action' => 'view'), 
    array('pass' => array('slug')) 
); 

怎麼辦?

+0

將'persist'更改爲'pass' – kicaj

+0

@kicaj將第一個代碼或第二個代碼中的'persist'更改爲'pass'確實有幫助。但是現在,這兩種代碼變體都不帶任何參數地重定向到'/ news/view'。 – Jan

+0

你有什麼cakephp版本? – user221931

回答

-1

有可能是在CakePHP中的錯誤。升級到最新版本(目前v2.3.9)的竅門。我的問題中的代碼確實有效。

+0

由於2.3.7和2.3之間沒有任何變化。9影響Router :: redirect,但在Router :: connect中存在一個條件放鬆的問題,問題可能是您沒有正確設置新路由。 – user221931

+0

@ user221931但我沒有更改代碼中的任何字符。它只是通過升級而工作。所以我不認爲我在設置路線時犯了錯誤。 – Jan

+0

是的,正是我所說的。你從來沒有正確設置路線,並且失敗了。 CakePhp決定放鬆一些嚴格的檢查,以使其即使在沒有正確設置的情況下也能正常工作。因此現在它工作。 – user221931

0

你有沒有正確設置你的路由爲新的網址?

Router::connect(
    '/news/:slug', 
    array('controller' => 'news', 'action' => 'view'), 
    array('pass' => array('slug'), 'slug' => '[\w]') 
); 

然後把它做重定向與

Router::redirect(
    '/old-url/:slug', 
    array('controller' => 'news', 'action' => 'view'), 
    array('persistent' => true, 'pass' => array('slug')) 
); 

我不相信你需要重新定義蛞蝓的重定向([\w]),但如果它不工作,那就試試吧('slug' => '[\w]'之後'pass')。

很明顯,您需要測試/news/test在嘗試重定向之前是否按預期工作。

+0

'/ news/test'明確地起作用,重定向是不起作用的。但將CakePHP升級到最新版本的確有竅門。我的代碼上面的作品。 – Jan

+0

你的第二個包含'Router :: redirect'的代碼示例不起作用。在下面看到我的問題和評論。升級做了訣竅。 – Jan

0

嘗試下面的代碼

Router::connect('/my-old-url/*', array('controller' => 'News','action' => 'view'),array('params' => '[a-zA-Z0-9]+')); 
+0

我想重定向,而不是連接路線。上面的代碼在將CakePHP更新到最新版本時起作用。 – Jan