2013-02-19 22 views
6

Tôi đang cố chuyển từ CodeIgniter sang CakePHP và không thể tìm ra cách tốt nhất để triển khai bảng quản trị. Trong CI, tôi sẽ tạo hai ứng dụng khác nhau, một cho frontend và một cho bảng quản trị.Cách tốt nhất để triển khai bảng quản trị trong CakePHP

Sau Googling xung quanh, tôi đã tìm thấy ba cách để thực hiện bảng quản trị trong CakePHP:

  1. Routing - Tôi không muốn sử dụng điều này như tôi muốn bằng cách điều khiển/mô hình là riêng biệt cho frontend và admin bảng
  2. Plugin
  3. Hai ứng dụng riêng biệt

tôi có nên sử dụng plugin để thực hiện bảng quản trị hay tôi nên có các ứng dụng riêng biệt? Bất kỳ lợi ích của một trong những khác?

+0

http://stackoverflow.com/questions/14474023/how-can-i-implement-multi-template-in-cakephp/14475492# 14475492 –

+0

Đi với 1. Định tuyến, chắc chắn. –

Trả lời

16

Tôi thường phát triển các admin/backend như một plugin. Điều này giúp các bộ điều khiển/khung nhìn/mô hình phụ trợ của bạn được tách riêng khỏi giao diện người dùng và bạn không phải nhảy qua các vòng để có các bảng định kiểu, bố cục riêng biệt, v.v.

Một ưu điểm khác là cả phần trước và phụ trợ vẫn là một phần của cùng một ứng dụng, vì vậy nếu muốn, bạn có thể chia sẻ logic/thành phần, ví dụ như bạn có thể đặt người trợ giúp - và phần phụ trợ trong một plugin khác (ví dụ: plugins/Shared hoặc plugins/Handytexttools) và sử dụng cả hai ở bất cứ nơi nào bạn muốn

Theo quy tắc chung; đặt các thành phần có thể được reuseable cho các dự án khác trong một plugin riêng biệt, theo cách này bạn chỉ có thể thêm các plugin cho các dự án khác mà không có vấn đề. Giữ các plugin của bạn đơn giản; không có vấn đề gì khi tạo một plugin chỉ chứa một hoặc hai người trợ giúp hoặc người mẫu và một vài tệp JavaScript. Điều này sẽ làm cho nó dễ dàng hơn để 'anh đào chọn' các plugin mà bạn cần cho một dự án. Khi Cake đã 'lưu trữ' các tệp-vị trí của tất cả các lớp trong các plugin của bạn, chi phí của các plugin riêng biệt phải ở mức tối thiểu.

Quay lại plugin 'quản trị'. Cố gắng chỉ bao gồm mã cụ thể cho dự án này trong plugin quản trị của bạn và các bộ phận có thể sử dụng lại trong một số khác (ví dụ: bảng định kiểu chung và bố cục cho bảng quản trị). Bạn sẽ có thể bắt đầu một admin-plugin cho dự án tiếp theo của bạn với tối thiểu mã hóa

Chúc may mắn với dự án của bạn và tận hưởng CakePHP

+1

Cảm ơn bạn đã giải thích. Thật không may không thể upvote bạn trả lời bởi vì tôi không có điểm yêu cầu danh tiếng. –

+0

Tôi đã bình chọn cho bạn. thaJeztah đã giúp tôi rất nhiều về vấn đề CakePHP của tôi. – bowlerae

+0

@bowlerae cảm ơn vì đã bỏ phiếu, tôi hy vọng câu trả lời của tôi cũng sẽ mang tính giáo dục cho những người khác :) – thaJeztah

0

Cũ và đề cập đến CakePHP 1.3, nhưng vẫn là một câu hỏi mà bạn nên kiểm tra: CakePHP admin panel

Các Bánh cách được định tuyến. Tôi muốn đi với một plugin như CakeDC Users giúp mọi thứ trở nên dễ dàng hơn.

+0

Tôi đã kiểm tra bài viết bạn đang đề cập đến và chỉ trỏ đến bảng điều khiển quản trị dựa trên định tuyến mà tôi không muốn sử dụng. Tôi muốn giữ riêng bộ điều khiển/mô hình của mình nếu có thể. –

+0

Bạn có thể sử dụng plugin "quản trị" nhưng thành thật mà ý tưởng này hút và bạn sẽ kết thúc bằng mã trùng lặp. Tôi đã phải đối phó với các tình huống như thế này trước đây trong các dự án và tái cấu trúc nó để sử dụng định tuyến tiền tố. Trong thực tế, bạn không có gì bằng cách đặt mã trong một plugin tách biệt ví dụ. – burzum

4

Nếu bạn muốn giữ bộ điều khiển và mô hình riêng biệt - Tôi sẽ đi với một ứng dụng riêng biệt, mặc dù bạn sẽ kết thúc với một loạt mã trùng lặp giữa các ứng dụng (bảo trì nhức đầu đang chờ xảy ra).

Lựa chọn của tôi sẽ là định tuyến quản trị và chủ đề quản trị viên.

Enable định tuyến admin trong /app/Config/core.php

Trong AppController beforeFilter():

$this->theme = isset($this->params['admin']) ? "Admin" : "Site"; 

Move tất cả các quan điểm trang web và tài sản của bạn vào/app/Xem/theo chủ đề/trang web/

Tạo chủ đề quản trị của bạn trong/app/View/Themed/Admin

+0

Còn cách tiếp cận plugin thì sao? Tôi đã googled một hoặc hai plugin quản trị viên cho CakePHP. Điều đó có mang lại bất kỳ lợi ích bổ sung nào cho các ứng dụng riêng biệt không? –

+0

Xin vui lòng đọc câu trả lời của tôi, tôi đã cố gắng để giải thích những lợi thế của việc sử dụng một plugin.Phát triển một ứng dụng * riêng biệt * cho bảng quản trị có thể chỉ là mong muốn nếu bảng quản trị được thiết kế để quản lý một số trang web. Nếu không, tôi sẽ không tạo một ứng dụng riêng biệt – thaJeztah

+0

Cá nhân tôi cảm thấy định tuyến dựa trên quản trị chỉ hữu ích cho các bảng quản trị đơn giản. Thêm vào đó, tôi không thích ý tưởng của admin và frontend code trong cùng một file. Quyết định để đi theo cách plugin cho bây giờ. –

0

Bạn có thể sử dụng định tuyến quản trị viên. Kiểm tra:

http://book.cakephp.org/2.0/en/development/routing.html#prefix-routing

Một giải pháp -which tôi thấy thực sự dễ dàng để implement- là như thế này:

Trong bạn AppController:

public function beforeFilter(){ 
     $this->set('current_user', $this->Auth->user()); 
     } 

Điều này làm cho $ CURRENT_USER sẵn trong ứng dụng của bạn.

Sau đó, theo quan điểm của các tập tin, bạn có thể kiểm tra:

<?php if ($current_user['role'] == 'admin'){/*place code for admin users to see here*/} ?> 
    <?php if ($current_user){/*place code for logged-in users to see here*/} ?> 
+0

Quản trị tiền tố là một tính năng tuyệt vời cho chức năng quản trị viên nhanh chóng, đặc biệt, nhưng sẽ không tách biệt chức năng phía trước và phụ trợ. Nếu bạn muốn tách biệt cả hai, tiền tố định tuyến không phải là cách tốt nhất để thực hiện điều này. Ngoài ra, đặt quá nhiều logic trong quan điểm của bạn (nếu quản trị, vv), rất khó để duy trì, đặc biệt là đối với các dự án lớn hơn – thaJeztah

0

Tôi biết đây là một chủ đề cũ. Nhưng muốn hỏi xem có ai gặp sự cố khi triển khai bảng quản trị dưới dạng plugin hay không. Đặc biệt trùng lặp mã.

Ví dụ: bạn đang triển khai trang web thương mại điện tử. Bạn có một OrderController cả trong plugin chính và admin. Bạn không nghĩ rằng nó là khó khăn để duy trì logic ở hai nơi?

Cách sử dụng một bộ điều khiển chính. Nó phục vụ hai mục đích. Một như là một API sau đó điều khiển cho webapp Admin của bạn.

Phía công cộng của bạn về cơ bản sẽ giao tiếp qua API để tìm nạp dữ liệu.

Bạn có nghĩ đó là một ý tưởng hay không?

0

Bạn có thể sử dụng quan điểm quản trị như admin_index.ctp chỉ cần thay đổi này

//Configure::write('Routing.admin', 'admin');

to

Định cấu hình :: viết ('Routing.admin', 'admin');

trong core.php và trong bộ điều khiển thêm admin_index() chức năng