2013-07-24 4 views
2

Я пытаюсь перенаправить /my-old-url/$slug к /news/$slug в CakePHP со следующим кодом: (? Может быть ошибка)CakePHP: перенаправление с помощью маршрутизатора :: редирект не сохраняет PARAMS

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

Используя этот код выдает ошибку

Предупреждение (2): Недействительный аргумент для Еогеаспа() [ОСНОВНОЙ/торт/маршрутизация/Маршрут/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 без каких-либо параметров.

Я использую следующий код для подключения новостей URL-адресов:

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 :: connect, где условие было ослаблено, вероятно, проблема заключалась в том, что вы не правильно настроили новый маршрут в первую очередь. – user221931

+0

@ user221931 Но я не менял ни одного символа в коде. Он работал только путем обновления. Поэтому я не думаю, что ошибся в настройке маршрута. – Jan

+0

Да, именно то, что я сказал. У вас никогда не было правильной установки маршрута, и это было неудачно. CakePhp решил сбросить некоторые строгие проверки, чтобы заставить его работать, даже если вы не настроили его правильно. Следовательно, теперь это работает. – user221931

0

Вы правильно настроили свою маршрутизацию для нового URL-адреса?

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

Try следующий код

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

Я хочу перенаправить, а не подключить маршрут. Мой код выше работает при обновлении CakePHP до последней версии. – Jan

Смежные вопросы