2010-11-15 110 views
9

Tôi đang làm việc trong CakePHP, và tôi đã sau hai dòng trong tập tin /app/config/routes.php tôi:Thay đổi bố cục admin trong 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')); 

Tôi cũng có một bố trí tại/app/views /layouts/admin.ctp

Tuy nhiên, cách bố trí không thay đổi khi tôi truy cập URL quản trị

Trả lời

29

Tạo một app/app_controller.php và đặt điều này trong:

<?php 
class AppController extends Controller { 

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

} 

Đừng quên gọi parent::beforeFilter(); trong bộ điều khiển nếu bạn sử dụng nó trong các bộ điều khiển khác.

Bán liên quan đến câu hỏi, bạn không cần định tuyến, bạn chỉ cần bật tùy chọn cấu hình Routing.admin và đặt thành admin trong app/config/core.php. (CakePHP 1.2)

+0

Cảm ơn! Trên tùy chọn cấu hình Routing.admin: 1. Điều đó đã được thay đổi thành routing.prefix 2. Tôi đã thay đổi nó vì nó không cung cấp tùy chọn 'bố cục', nhưng bây giờ là không liên quan 3. Ngay cả với Routing.admin (hoặc tiền tố) trên, tôi vẫn cần tuyến thứ hai cho một trang chỉ mục – xaav

+0

tuyến đường thứ hai của bạn vẫn cần, tuy nhiên tôi không tin rằng bạn cần 'bố cục' => 'quản trị' tất cả những gì đang làm là thêm thông số vào url của bạn (nếu bạn đặt pass) sẽ chỉ có trên trang đó. Routing.prefixes thực hiện điều gì đó tương tự với tuyến đường đầu tiên của bạn :) – dogmatic69

3

Thêm mã này trong beforeFilter() chức năng trong 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' trong routes.php

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

các cách tiếp cận ở trên là tốt nhưng nếu bạn đang tìm cách thay đổi bố cục cho mỗi trang khi đăng nhập, bạn có thể thử cách sau bằng cách sử dụng Thành phần Auth

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

Đối với CakePHP 3.0, bạn có thể đặt biến chế độ xem bằng cách gọi Auth-> user trong beforeRender trong AppController. Đây là beforeRender của tôi:

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

    $userRole = $this->Auth->user(); 
    $this->set('userRole', $userRole['role']); 
} 
Các vấn đề liên quan