Маршрутизация Cakephp с дополнительными параметрами
Вопрос
У меня есть метод в моем контроллере пользователей, похожий на:
function members($type = null, $category = null) { ... }
Оба параметра являются необязательными и могут использоваться вместе или по отдельности.
Итак, следующий маршрут.
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
как мне настроить маршруты так, чтобы все они работали правильно?
Решение
Именованные параметры не сопоставляются с действием автоматически.Вы можете получить их, позвонив
$this->passedArgs['type'] или $this->passedArgs['category']
или используя третий параметр в Router::connect:
Router::connect(
'/members/*',
array('controller' => 'users', 'action' => 'members'),
array(
'pass' => array('type', 'category')
)
);
Другие советы
Попробуйте с
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'));
Обратите внимание: я это не проверял, но думаю, вам нужно избегать двоеточия.