Обратная маршрутизация CakePHP не работает должным образом - PullRequest
1 голос
/ 23 мая 2011

Мне нужно несколько маршрутов в моем приложении, чтобы позволить динамической строке продолжить префикс.

Вот мой маршрут:

Router::connect('/:location/traveler/:controller/*', array('action' => 'index', 'traveler' => true, 'prefix' => 'traveler'), array('pass' => array('location')));

Например, если я перешел на / south / путешественник / запросы он будет успешно перенаправлен в RequestsController :: traveler_index ($ location = 'south').

Это то, что я хочу, но мне также нужен HtmlHelper :: link () дляправильно перенаправить массив URL в этот маршрут.

Вот мой вызов HtmlHelper :: link ():

$this->Html->link('List Requests', array('controller' => 'requests', 'action' => 'index', 'location' => 'south'));

Префиксная маршрутизация подразумевается (или должна быть) подразумеваемой, поскольку это происходитвызывается из представления в префиксе путешественника.

URL-адрес, по которому вызывается сообщение:

http://domain.com/traveler/requests/location:south

Не правильно ли я что-то сделал?Можно ли как-нибудь избежать создания пользовательского класса маршрута для правильной реверсии этих массивов URL?

Ответы [ 2 ]

3 голосов
/ 23 мая 2011

Вы должны сообщить маршрутизатору, что location должен быть именованным параметром, используя Router::connectNamed.См. Раздел Именованные параметры книги CakePHP v1.3 :

URL: /contents/view/chapter:models/section:associations

При создании пользовательских маршрутов распространенной ошибкой является то, что использование именованных параметров нарушит ваши пользовательские маршруты.Для решения этой проблемы вы должны сообщить маршрутизатору, какие параметры должны быть названы параметрами.Без этого знания маршрутизатор не может определить, предназначены ли именованные параметры для именованных параметров или параметров маршрутизации, и по умолчанию предполагает, что вы предполагали, что они являются параметрами маршрутизации.Для подключения именованных параметров в маршрутизаторе используйте Router :: connectNamed ().

Router::connectNamed(array('chapter', 'section'));

. Убедитесь, что параметры вашей главы и раздела изменяют маршрут правильно.

2 голосов
/ 24 мая 2011

Я решил проблему.

Удаляя Router :: connectNamed () из rout.php, я восстановил маршрут, который был неверно настроен.

Обратный маршрут к traveler_index () работал правильно, используя маршрут, который я перечислил выше, но любой вызов любой другой функции, такой как traveler_edit (), завершился бы неудачей.

Используя маршрут ниже, я смог заставить его изменить маршрут для любого действия на любом контроллере в префиксе путешественника с местоположением в качестве переменной.

Router::connect('/:location/traveler/:controller/:action/*', array('traveler' => true, 'prefix' => 'traveler'), array('pass' => array('location')));

Теперь мой вызов HtmlHelper :: link () правильно перенаправляет мой массив URL:

$this->Html->link('Edit Details', array('controller' => 'requests', 'action' => 'edit', 'location' => 'south', 1234));

... обратные маршруты к / юг / путешественник / запросы / редактировать / 1234 .

...