/controller/action/custom/
отлично работает по умолчанию.
Он вызывает ControllerController::action('custom')
.
Если вы ищете что-то вроде вызова UsersController::thankyou()
через URL /users/registration/thankyou
, вы можете сделать соответствующийroute:
Router::connect('/users/registration/thankyou',
array('controller' => 'users', 'action' => 'thankyou'));
Вы можете группировать маршруты в одном правиле, например:
// Routes /users/registration/optin and /users/registration/thankyou to
// UsersController::optin() and UsersController::thankyou() respectively
Router::connect('/users/registration/:action',
array('controller' => 'users'),
array('action' => '(optin|thankyou)'));
Маршруты очень мощные и полностью гибкие в Cake.Как всегда, изучите руководство:
http://book.cakephp.org/view/945/Routes-Configuration
Основы в том, что Маршрутизатор сопоставляет маршрут, например, '/users/registration/:action'
, с текущим URL, включая условия, указанные в третьем параметре,например, 'action' => '(optin|thankyou)'
(часть :action
должна соответствовать RegEx /^(optin|thankyou)$/
).
Если она совпадает, она объединяет значения по умолчанию из второго параметра с любой информацией, извлеченной из URL, поэтому вы получаете array('controller' => 'users', 'action' => 'thankyou')
дляпример.
Затем он проталкивает его через CakeRoute::parse
, который создает массив, который вы можете видеть при выполнении debug($this->params)
в контроллере.Этот массив используется для определения того, какой контроллер загружать и какое действие вызывать.
Базовый RegEx и сопоставление параметров уже очень мощные, но вы можете полностью сойти с ума, подклассифицировав CakeRoute
и предоставив пользовательский parse
функция, как кратко объяснено в конце руководства.:)