Изменение макета администратора в CakePHP

Я работаю в 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

Однако макет не изменяется при посещении админ-адресов

Solutions Collecting From Web of "Изменение макета администратора в CakePHP"

Создайте 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']); }