2010-11-15 12 views
9

pracuję w CakePHP, i mam następujące dwie linie w moim pliku /app/config/routes.php:Zmień układ administracyjny w 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')); 

Mam też układ w/app/views /layouts/admin.ctp

jednak układ nie ulegnie zmianie, kiedy odwiedzam URL administratora

Odpowiedz

29

app/app_controller.php stworzyć i umieścić to w:

<?php 
class AppController extends Controller { 

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

} 

Nie zapomnij zadzwonić pod numer parent::beforeFilter(); w kontrolerach, jeśli używasz go w innych kontrolerach.

Częściowo powiązane z pytaniem, nie potrzebujesz zdefiniowanych tras, wystarczy włączyć opcję konfiguracyjną Routing.admin i ustawić ją na w app/config/core.php. (CakePHP 1,2)

+0

Dzięki! W opcji konfiguracyjnej Routing.admin: 1. Została zmieniona na routing.prefix 2. Zmieniono ją, ponieważ nie zawierała opcji 'layout', ale teraz jest to nieodwołalna 3. Nawet z Routing.admin (lub prefiks) na, nadal potrzebuję drugiej trasy dla strony indeksu – xaav

+0

twoja druga trasa wciąż jest potrzebna, jednak nie wierzę, że potrzebujesz 'layout' => 'admin' wszystko co robisz to dodanie paramu do twojego adresu URL (jeśli ustawisz pass), które będą dostępne tylko na tej stronie. the Routing.prefixes robi coś podobnego do twojej pierwszej trasy :) – dogmatic69

3

Dodaj ten kod w beforeFilter() funkcja w 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'; 
    } 

    } 

} 
?> 

Zestaw układu = 'admin' w routes.php

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

powyższe podejścia są dobre, ale jeśli chcesz zmienić układ każdej strony po zalogowaniu, możesz wypróbować następujące elementy, korzystając z Auth Component

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

Dla cakephp 3.0 można ustawić zmienną widoku, wywołując Auth-> user w module beforeRender w AppController. To jest mój przedRender:

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

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