Изменить макет администратора в CakePHP - PullRequest
9 голосов
/ 15 ноября 2010

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

Однако, когда я захожу на админские URL, макет не изменяется

Ответы [ 5 ]

30 голосов
/ 15 ноября 2010

Создайте 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 config и установить ее на admin в app/config/core.php.(CakePHP 1.2)

3 голосов
/ 23 ноября 2011

Добавьте этот код в функцию 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';  
    } 

    }

}
?>

Set layout = 'admin' в routes.php

<?php    
Router::connect('/admin', array('controller' => 'users', 'action' => 'index','add', 'admin' => true,'prefix' => 'admin','layout' => 'admin'));
?>
0 голосов
/ 05 ноября 2018

Для CakePHP 3.X вы должны отредактировать файл src/View/AppView.php и добавить следующий код в ваш метод initialize():

public function initialize()
{
    if ($this->request->getParam('prefix') === 'admin') {
        $this->layout = 'Plugin.layout';
    }
}
0 голосов
/ 05 декабря 2015

Для cakephp 3.0 вы можете установить переменную представления, вызвав Auth-> user в beforeRender в AppController. Это мой beforeRender:

public function beforeRender(Event $event)
{
    ///...other stuff

    $userRole = $this->Auth->user();
    $this->set('userRole', $userRole['role']);
}
0 голосов
/ 22 мая 2013

вышеприведенные подходы хороши, но если вы хотите изменить макет для каждой страницы при входе в систему, вы можете попробовать следующее, используя Auth Component

function beforeFilter() {
    if ($this->Auth->user()) {
        $this->layout = 'admin';
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...