Привет я настраиваю администратора, направляющего в CakePHP.
Это - мой текущий маршрут:
Router::connect('/admin/:controller/:action/*', array('admin' => true, 'prefix' => 'admin', 'controller' => 'pages', 'action' => 'display', 'home'));
Это хорошо работает, но я не понимаю, каков различие между 'администратором' => верный, и 'префиксом' => 'администратор'.
Когда я опустил 'prefix' => 'admin'
, маршрутизатор не использовал бы admin_index
и вместо этого просто использовал бы index
. Таким образом какой смысл 'admin' => true
?
Установив 'prefix' => 'admin'
, вы сообщаете CakePHP, что хотите использовать префикс admin
для этого маршрута; в основном это означает, что вы хотите использовать действия и представления контроллера, имена которых имеют префикс admin_
. Эта часть вам уже известна, и с ней, вероятно, все будет хорошо.
Однако при создании маршрутов во второй аргумент передаются любые ключи массива, которые не распознаются CakePHP (т.е. не ваш обычный контроллер
, action
, plugin
, prefix
stuff) устанавливаются как именованные параметры во время запросов, соответствующих этому маршруту.
Добавление 'admin' => true
в данном случае является просто именованным параметром, но оно имеет свои преимущества. Во-первых, это может сделать код более лаконичным.
/* Determine if a request came through admin routing */
// without:
if ($this->params['prefix'] == 'admin') {}
// with:
if ($this->params['admin']) {}
/* Create a link that is reverse-routed to an admin prefixed route */
// without:
$html->link('...', array('prefix' => 'admin', 'controller' => 'users'));
// with:
$html->link('...', array('admin' => true, 'controller' => 'users'));
Во-вторых, он обеспечивает обратную совместимость с тем, как маршрутизация администратора работала в CakePHP 1.2 (последняя строка из приведенного выше примера показывает, как вы могли бы создать ссылки маршрутизации администратора в 1.2). Таким образом, разработчики, переходящие с 1.2 на 1.3, могут предотвратить необходимость изменения ссылок во всем своем приложении, сохранив флаг 'admin' => true
в своих маршрутах (и добавив префикс 'prefix' => 'admin '
один).
Наконец, установка такого настраиваемого флага с именованным параметром и использование его в вашем приложении вместо ссылки на ваш маршрут с помощью точной строки означает, что вам никогда не придется менять ссылки, если вы измените префикс на что-то другое. (скажем, от admin
до administrator
или edit
) ... хотя это своего рода спорный вопрос, так как вам нужно будет переименовать все свои admin _ *
действия и представления контроллера. :)