开发者

Change admin layout in CakePHP

开发者 https://www.devze.com 2023-01-25 06:15 出处:网络
I am working in cakephp, and I have the following two lines in my /app/config/routes.php file: /** * ...and setup admin routing

I am working in cakephp, and I have the following two lines in my /app/config/routes.php file:

/**
 * ...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'开发者_JS百科, array('controller' => 'profiles', 'action' => 'index', 'admin' => true, 'layout' => 'admin'));

I also have a layout at /app/views/layouts/admin.ctp

However, the layout is not changed when I visit admin URLs


Create a app/app_controller.php and put this in:

<?php
class AppController extends Controller {

    function beforeFilter() {
        if (isset($this->params['prefix']) && $this->params['prefix'] == 'admin') {
            $this->layout = 'admin';
        } 
    }

}

Don't forget to call parent::beforeFilter(); in your controllers if you use it in other controllers.

Semi related to the question, you don't need the routes defined, you just need to enable Routing.admin config option and set it to admin in the app/config/core.php. (CakePHP 1.2)


Add this code in beforeFilter() function in 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' in routes.php

<?php    
Router::connect('/admin', array('controller' => 'users', 'action' => 'index','add', 'admin' => true,'prefix' => 'admin','layout' => 'admin'));
?>


For CakePHP 3.X you should edit your src/View/AppView.php file and add the following code to your initialize() method:

public function initialize()
{
    if ($this->request->getParam('prefix') === 'admin') {
        $this->layout = 'Plugin.layout';
    }
}


the approaches above are good but if you are looking to change the layout for every page when logged in you might try the following using Auth Component

function beforeFilter() {
    if ($this->Auth->user()) {
        $this->layout = 'admin';
    }
}


For cakephp 3.0 you can set a view variable by calling Auth->user in the beforeRender in AppController. This is my beforeRender:

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

    $userRole = $this->Auth->user();
    $this->set('userRole', $userRole['role']);
}
0

精彩评论

暂无评论...
验证码 换一张
取 消