2010-01-27 3 views
1

У меня есть метод в моих пользователях контроллера похож на:CakePHP маршрутизация с дополнительным Params

function members($type = null, $category = null) { ... } 

Оба PARAMS является необязательным и может быть использован вместе или по собственному желанию.

Итак, следующим маршрутом.

Router::connect('/members/*', array('controller' => 'users', 'action' => 'members')); 

http://example.com/users/members успешно становится http://example.com/members.

К сожалению, следующие не работают

http://example.com/members/type:cat
http://example.com/members/category:dog
http://example.com/members/type:cat/category:dog

как я мог настроить свои маршруты так, что все они работают правильно?

ответ

2

Именованные параметры не являются автоматическими для отображения. Вы можете либо получить их по телефону

$ this-> passedArgs [ 'типа'] или $ this-> passedArgs [ 'категория']

или с помощью 3-го параметра в маршрутизаторе: : подключение:

Router::connect(
    '/members/*', 
    array('controller' => 'users', 'action' => 'members'), 
    array(
     'pass' => array('type', 'category') 
    ) 
); 

http://book.cakephp.org/view/46/Routes-Configuration

+0

Как ни странно это делает работу при вводе URL-адрес непосредственно хотя обратная маршрутизация не делает. $ html-> link ('my link', array ('controller' => users, 'action' => 'members', 'type' => 'hello', 'category' => 'world')); приводит к регулярному URL-адресу стиля. Есть ли что-то еще, что вам нужно сделать до того, как начнется обратная маршрутизация? – DanCake

+0

есть ли другие маршруты? Если это так, есть вероятность, что другой вызов соединения позаботится об обратном маршрутизации. – harpax

+0

Router :: connectNamed (array ('type', 'category')); похоже работа. – DanCake

1

Попробуйте с

Router::connect('/members/type\:(.*)', array('controller' => 'users', 'action' => 'members_type')); 
Router::connect('/members/category\:(.*)', array('controller' => 'users', 'action' => 'members_category')); 
Router::connect('/members/type\:(.*)/category:(.*)', array('controller' => 'users', 'action' => 'members_type')); 

Обратите внимание, что я не проверял, но я думаю, что вы должны бежать двоеточие.

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