2010-11-15 12 views
9

estoy trabajando en cakephp, y tengo las siguientes dos líneas en mi archivo /app/config/routes.php:Cambio de Presentación admin en CakePHP

/** 
* ...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')); 

También tengo un diseño en/app/views /layouts/admin.ctp

sin embargo, la disposición no se cambia cuando vuelva a direcciones URL de administración

Respuesta

29

Crear una app/app_controller.php y poner esto en:

<?php 
class AppController extends Controller { 

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

} 

No olvide llamar al parent::beforeFilter(); en sus controladores si lo usa en otros controladores.

Semi relacionado con la pregunta, no necesita las rutas definidas, solo tiene que habilitar la opción de configuración Routing.admin y configurarlo en admin en el app/config/core.php. (CakePHP 1.2)

+0

Gracias! En la opción de configuración Routing.admin: 1. Se ha cambiado a routing.prefix 2. Lo cambié porque no proporcionaba la opción 'layout', pero ahora eso es irrelavent 3. Incluso con el Routing.admin (o prefijo), todavía necesito la segunda ruta para una página de índice – xaav

+0

, su segunda ruta aún es necesaria; sin embargo, no creo que necesite 'layout' => 'admin'; todo lo que hace es agregar un param en su url (si establece el pase) que solo estará disponible en esa página. el prefijo de enrutamiento hace algo similar a tu primera ruta :) – dogmatic69

3

Añadir este código en beforeFilter() en 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'; 
    } 

    } 

} 
?> 

Conjunto layout = 'admin' en routes.php

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

los enfoques anteriores son buenos, pero si está buscando cambiar el diseño de cada página cuando inicia sesión, intente lo siguiente con el componente de autenticación

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

Para cakephp 3.0 puede establecer una variable de vista llamando a Auth-> user en el beforeRender en AppController. Este es mi beforeRender:

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

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