В CakePHP администратор маршрутов (admin routing) довольно прост: вы можете включить его, вы можете отключить его, вы можете изменить преффикс для него. Но это не все действия, которые вы можете провести с ним. Правильно?
Я собираюсь рассказать маленький секрет про этот кусок кода:
Configure::write('Routing.admin', 'admin');
Это в значительной степени не важно.
Изначально(т.е 1.1 версии и ниже), администратор маршрутов был довольно статичным. Однако, был переработан в 1.2 так, что вы можете создавать администраторов маршрута (сейчас они называются "prefix routes" или "префикс пути") тем же путем, что создаете нормальные маршруты. Была поддержана сама конфигурация для обратной совместимости, поэтому они почти функционально идентичны:
Router::connect('/admin/:controller/:action/*', array( 'action' => null, 'prefix' => 'admin', 'admin' => true ));
Я говорю "почти" потому что есть одна вещь в коде что не поддерживает часть, которой являются плагины, но это может быть исправлено так же просто:
if ($plugins = Configure::listObjects('plugin')) { $pluginMatch = implode('|', array_map(array('Inflector', 'underscore'), $plugins)); Router::connect( "/admin/:plugin/:controller/:action/*", array('action' => null, 'prefix' => 'admin', 'admin' => true), array('plugin' => $pluginMatch) ); }
Быстрое объяснение параметров:
Использования эти параметры, вы можете создавать столько префиксов маршрутов, сколько вам потребуется. Однако, имейте в виду, что эти флаги не сохраняются по умолчанию. Но вы можете сказать Cake для сохранения определенных параметров автоматически, как в этом примере с PaginatorHelper:
$paginator->options(array('url' => array('admin' => true))); echo $paginator->link('Page 2', array('page' => 2));
Однако, это относится только к URL генерируемый PaginatorHelper. Чтобы обобщить его для всех помощников ("helpers"), вы можете реализовать простую проверку в AppHelper, работающую следующим образом:
App::import('Core', 'Helper'); class AppHelper extends Helper { function url($url = null, $full = false) { if (isset($this->params['admin']) && is_array($url) && !isset($url['admin'])) { $url['admin'] = $this->params['admin']; } return parent::url($url, $full); } }
Этот код может экстраполироваться вне сохранения каких-либо параметров Вашего приложения.
В заключении могу сказать, что используя эти методы, пользовательские префиксы маршрутизации в CakePHP как никогда станут намного проще и более гибкими.
Взято и переведено с bakery.cakephp.org