Маршрутизация: 'admin' => true против 'prefix' => 'admin в CakePHP - PullRequest
14 голосов
/ 30 июня 2010

Привет, я настраиваю административную маршрутизацию в 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?

Ответы [ 2 ]

27 голосов
/ 02 июля 2010

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

При создании маршрутов все ключи массива, передаваемые во второй аргумент, не распознаются CakePHP (т. Е. Не обычнымcontroller, 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_*.:)

4 голосов
/ 26 сентября 2010
// 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));
...