2010-06-30 1 views
14

Привет Я настраиваю маршрутизацию admin в CakePHP.Маршрутизация: 'admin' => true vs 'prefix' => 'admin в CakePHP

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

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

Он отлично работает, но я не понимаю, в чем разница между «админ» => правда, и «префикс» => «админ» есть.

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

ответ

26

Установив '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').

И наконец, установив собственный флаг как этот с именованным параметром и используя его в своем приложении, вместо того, чтобы ссылаться на ваш маршрут с помощью точной строки, вы не позволяете себе изменять ссылки, если вы измените префикс на что-то else (скажем от admin до administrator или edit) ... хотя это своего рода спорная точка, так как вам нужно будет переименовать все свои действия и представления контроллера . :)

+0

Спасибо, только что мне нужно – Rob

4
// 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)); 
+3

В 1.3 это правильный способ обработки префикса в ссылках. У меня есть префикс администратора и куратора. просто сделайте «куратор» => true или «admin» => true. Добавление 'prefix' => 'curator' ничего не делает. – Walker