Маршрутизация: 'admin' => true vs 'prefix' => 'admin в CakePHP

Привет, я настраиваю маршрутизацию admin в CakePHP.

Это мой текущий маршрут:

Router::connect('/admin/:controller/:action/*', array('admin' => true, 'prefix' => 'admin', 'controller' => 'pages', 'action' => 'display', 'home'));

Он отлично работает, но я не понимаю, какая разница между "admin" = > true и "prefix" = > "admin".

Когда я опустил 'prefix' => 'admin', маршрутизатор не использовал бы admin_index и вместо этого просто использовал бы index. Итак, что точка 'admin' => true?

Ответы

Ответ 1

Установив 'prefix' => 'admin', вы сообщаете CakePHP, что вы хотите использовать префикс admin для этого маршрута; в основном это означает, что вы хотите использовать действия и представления контроллера с именами, префиксными с помощью admin_. Эта часть, о которой вы уже знаете, и, вероятно, все будет хорошо работать именно с этим.

При создании маршрутов любые ключи массива, переданные во второй аргумент, которые не распознаются CakePHP (т.е. не ваши обычные controller, action, plugin, prefix вещи), устанавливаются как именованные параметры во время запросов, соответствующих этому маршруту.

Добавление '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_*.:)

Ответ 2

// Go into a prefixed route.
echo $html->link('Manage posts', array('manager' => true, 'controller' => 'posts', 'action' => 'add'));

// leave a prefix
echo $html->link('View Post', array('manager' => false, 'controller' => 'posts', 'action' => 'view', 5));