我正在尝试使用以下代码将/my-old-url/$slug
重定向到CakePHP中的/news/$slug
:
Router::redirect(
'/my-old-url/*',
array('controller' => 'news', 'action' => 'view'),
array('persist' => true)
);
使用此代码会引发错误(可能是错误?)
警告(2):为foreach()提供的参数无效[CORE / Cake / Routing / Route / 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 :(得分: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'))
);
我不认为您需要在重定向中再次定义slug([\w]
),但如果它不起作用,请尝试'slug' => '[\w]'
之后的'pass'
。
显然,在尝试重定向之前,您需要测试/news/test
是否与路由一起正常工作。
答案 1 :(得分:0)
尝试以下代码
Router::connect('/my-old-url/*', array('controller' => 'News','action' => 'view'),array('params' => '[a-zA-Z0-9]+'));
答案 2 :(得分:-1)
CakePHP中可能存在错误。升级到最新版本(目前为v2.3.9)就可以了。我的问题中的代码确实有用。