Я работаю в cakephp, и у меня есть следующие две строки в файле /app/config/routes.php:
/** * ...and setup admin routing */ Router::connect('/admin/:controller/:action/*', array('action' => null, 'prefix' => 'admin', 'admin' => true, 'layout' => 'admin' )); /** * ...and set the admin default page */ Router::connect('/admin', array('controller' => 'profiles', 'action' => 'index', 'admin' => true, 'layout' => 'admin'));
У меня также есть макет в /app/views/layouts/admin.ctp
Однако макет не изменяется при посещении админ-адресов
Создайте app/app_controller.php
и поместите это в:
<?php class AppController extends Controller { function beforeFilter() { if (isset($this->params['prefix']) && $this->params['prefix'] == 'admin') { $this->layout = 'admin'; } } }
Не забудьте вызвать parent::beforeFilter();
в ваших контроллерах, если вы используете его в других контроллерах.
Полу, связанный с вопросом, вам не нужны указанные маршруты, вам просто нужно включить Routing.admin
конфигурации Routing.admin
и установить его в admin
в app/config/core.php
. (CakePHP 1.2)
Добавьте этот код в функцию beforeFilter () в app_controller.php
<?php class AppController extends Controller { function beforeFilter() { if (isset($this->params['prefix']) && $this->params['prefix'] == 'admin') { $this->layout = 'admin'; } else { $this->layout = 'user'; } } } ?>
Установить layout = 'admin' в routes.php
<?php Router::connect('/admin', array('controller' => 'users', 'action' => 'index','add', 'admin' => true,'prefix' => 'admin','layout' => 'admin')); ?>
вышеприведенные подходы хороши, но если вы хотите изменить макет для каждой страницы при входе в систему, попробуйте использовать компонент Auth Component
function beforeFilter() { if ($this->Auth->user()) { $this->layout = 'admin'; } }
Для cakephp 3.0 вы можете установить переменную вида, вызвав Auth-> user в beforeRender в AppController. Это мой beforeRender:
public function beforeRender(Event $event) { ///...other stuff $userRole = $this->Auth->user(); $this->set('userRole', $userRole['role']); }