2010-06-30 32 views
14

Xin chào, tôi đang thiết lập định tuyến quản trị trong CakePHP.Định tuyến: 'admin' => true vs 'prefix' => 'admin trong CakePHP

Đây là tuyến đường hiện tại của tôi:

Router::connect('/admin/:controller/:action/*', array('admin' => true, 'prefix' => 'admin', 'controller' => 'pages', 'action' => 'display', 'home')); 

Nó hoạt động tốt, nhưng tôi không hiểu những gì là sự khác biệt giữa 'admin' => true, và 'prefix' => 'admin' là.

Khi tôi bỏ qua 'prefix' => 'admin', bộ định tuyến sẽ không sử dụng admin_index và thay vào đó sẽ chỉ sử dụng index. Vì vậy, quan điểm của 'admin' => true là gì?

Trả lời

26

Bằng cách đặt 'prefix' => 'admin', bạn đang yêu cầu CakePHP mà bạn muốn sử dụng tiền tố admin cho tuyến đường đó; về cơ bản có nghĩa là bạn muốn sử dụng các hành động điều khiển và các khung nhìn có các tên được đặt trước bằng admin_. Điều này một phần bạn đã nhận thức được, và mọi thứ có thể sẽ làm việc tốt với chỉ này.

Khi tạo các tuyến đường mặc dù, bất kỳ phím mảng truyền vào đối số thứ hai không được công nhận bởi CakePHP (tức. Không phải của bạn thường controller, action, plugin, prefix thứ) được thiết lập như các thông số tên trong các yêu cầu phù hợp với lộ trình đó.

Thêm 'admin' => true do đó chỉ là một tham số được đặt tên trong trường hợp này, nhưng nó đi kèm với những ưu điểm của nó. Thứ nhất, nó có thể làm cho mã ngắn gọn hơn.

/* Determine if a request came through admin routing */ 
// without: 
if ($this->params['prefix'] == 'admin') {} 
// with: 
if ($this->params['admin']) {} 

/* Create a link that is reverse-routed to an admin prefixed route */ 
// without: 
$html->link('...', array('prefix' => 'admin', 'controller' => 'users')); 
// with: 
$html->link('...', array('admin' => true, 'controller' => 'users')); 

Thứ hai, nó cung cấp khả năng tương thích ngược với các tuyến đường quản trị viên làm việc trong CakePHP 1.2 (dòng cuối cùng từ ví dụ trên là cách bạn sẽ làm liên kết quản trị định tuyến trong 1.2). Do đó, các nhà phát triển di chuyển từ 1,2 đến 1,3 có thể ngăn chặn việc phải thay đổi liên kết trong suốt ứng dụng của họ bằng cách giữ cờ 'admin' => true trong tuyến đường của họ (và thêm 'prefix' => 'admin' một).

Cuối cùng, bằng cách đặt cờ tùy chỉnh như thế này với thông số được đặt tên và sử dụng nó trong ứng dụng của bạn thay vì tham chiếu tuyến đường của bạn bằng chuỗi chính xác có nghĩa là bạn ngăn mình không bao giờ phải thay đổi liên kết nếu bạn thay đổi tiền tố khác (nói từ admin đến administrator hoặc edit) ... mặc dù đây là loại điểm tranh luận, vì bạn cần phải đổi tên tất cả các hoạt động và chế độ xem của bộ điều khiển admin_*. :)

+0

Cảm ơn bạn, chỉ cần những gì tôi cần – Rob

4
// Go into a prefixed route. 
echo $html->link('Manage posts', array('manager' => true, 'controller' => 'posts', 'action' => 'add')); 

// leave a prefix 
echo $html->link('View Post', array('manager' => false, 'controller' => 'posts', 'action' => 'view', 5)); 
+3

Trong 1.3, đây là cách thích hợp để xử lý tiền tố trong liên kết. Tôi có tiền tố quản trị viên và người phụ trách. chỉ cần làm 'curator' => true hoặc 'admin' => true. Thêm 'tiền tố' => 'người phụ trách' không làm gì cả. – Walker