5

Tôi đang làm việc trên đại tu một ứng dụng CakePHP mà tôi đã tạo trong CakePHP 1.2. Tôi đã nâng cấp lên 1,3 và đang cân nhắc việc di chuyển khỏi mô hình định tuyến quản trị cho ứng dụng của mình. Tôi thấy rằng một số bộ điều khiển của tôi đang nhận được rất lớn vì các chức năng trùng lặp cho kết thúc trước và quản trị. Trực giác của tôi là nó sạch sẽ hơn nhiều khi chỉ tạo một bộ điều khiển quản trị và thả tất cả các định tuyến quản trị cùng nhau, nhưng tôi muốn nhận thông tin về những gì người khác đang làm và chức năng nào, nếu có, tôi sẽ bỏ lỡ bỏ định tuyến.Thực hành tốt nhất của CakePHP: Quản trị viên có hoặc không có định tuyến

Thực tiễn tốt nhất được coi là gì cho ứng dụng CakePHP mạnh mẽ (hoặc khung MVC khác) về vấn đề này?

+0

tôi đã nhận được hai đề xuất để thả các định tuyến, mà tôi có khuynh hướng làm, nhưng ngay sau khi tôi bắt đầu thử điều này, tôi cảm thấy như mình đã đập vào một bức tường gạch. Trong một ứng dụng không có khung, tôi sẽ chỉ tạo một thư mục mới "admin" và đặt tất cả các bộ điều khiển quản trị cụ thể vào đó, nhiều bộ điều khiển sẽ có cùng tên với bộ điều khiển kết thúc và do đó sẽ được truy cập: "/ admin/người dùng/thêm ". Tôi không tìm cách nào để làm một cái gì đó tương tự với Bánh. Là tùy chọn duy nhất của tôi/admin_users/thêm? – seth

Trả lời

0

Đừng bận tâm với việc định tuyến quản trị nếu nó không phù hợp với kịch bản của bạn. Tôi cũng không sử dụng nó, đường dẫn quản trị không phù hợp với ứng dụng của tôi. Mã trùng lặp hoàn toàn lãng phí công sức.

Bạn có thể sử dụng các quy tắc ACL cho các vai trò tốt, hoặc chỉ cần kiểm tra vai trò (cờ quản trị) trong beforeFilter của controller() hoặc trong dòng đầu tiên của một hành động.

Tôi có một thành phần chức năng checkRole (array()), được gọi là trong dòng đầu tiên của hành động của tôi. Nếu người dùng hiện tại không có vai trò được cung cấp, nó sẽ ghi lại và chấm dứt yêu cầu.

0

Tôi muốn sử dụng ACL/vai trò cho công cụ quản trị thực sự và có thể không sử dụng định tuyến quản trị trong sản xuất. Đôi khi tôi giữ một đoạn mã được quản lý (cho phép thêm mã tối thiểu) để quản trị các công cụ quản trị cấp thấp, chỉ có thể truy cập được với tôi, nhưng điều đó có thể không khôn ngoan trong một ứng dụng sản xuất mạnh mẽ.

Chỉnh sửa sau khi bình luận: Không tối ưu, nhưng bạn có thể đặt cùng thứ gì đó sẽ xuất hiện như bạn muốn trong URL và cũng được sắp xếp thành các thư mục. Tôi chưa thể thử nghiệm nó, nhưng đây là ý tưởng:

Tạo thư mục "quản trị" trong thư mục bộ điều khiển của bạn và cho người dùng quản trị, tạo tệp người dùng user_admin_controller.php. Chúng thu gọn cấu trúc thư mục, vì vậy bạn vẫn không thể có cùng tên với thư mục gốc, nhưng bạn vẫn có thể tách chúng thành một thư mục.

Mặc định nó sẽ làm tình trạng /admin_users/add loại, nhưng điều đó có thể được tinh chỉnh với phần thứ hai, một số tuyến:

Router::connect('/admin/users/:action', array('controller'=>'admin_users')) 

này sẽ phải được thực hiện đối với từng phần admin - không lý tưởng, nhưng tôi không thể tìm ra cách tốt hơn mà không sửa đổi mã Cake.

+0

Vậy thì URL phần quản trị của bạn trông như thế nào? Tôi cảm thấy như thế này sẽ không có trí tuệ, ngoại trừ không có cách nào tốt để đặt bộ điều khiển trong các thư mục con được truy cập thông qua/subdir/control/action (ví dụ:/admin/users/add). Bạn chỉ cần đặt tên cho tất cả các bộ điều khiển quản trị của mình bằng "admin" được thêm vào trước (ví dụ:/admin_users/add)? – seth

+0

Nếu sử dụng ACL/vai trò, chỉ có các trang/hành động chỉ có thể truy cập được với quản trị viên hoặc có chức năng bổ sung với quản trị viên. Nhưng những gì tôi nghĩ rằng bạn đang yêu cầu là khi sử dụng giàn giáo, hoặc với các phần quản trị. Ở đó, bạn có thể sử dụng "quản trị định tuyến" để có người quản trị/người dùng/thêm như bạn muốn. Xem hướng dẫn sử dụng CakePHP: http://book.cakephp.org/view/46/Routes-Configuration#Prefix-Routing-544 Với điều đó, bạn chỉ có chức năng 'admin_add' trong bộ điều khiển người dùng, được truy cập qua '/ admin/users/add', và sau đó là một hàm' add' bình thường được truy cập thông qua '/ users/add'. – cincodenada

+0

Tôi hoàn toàn hiểu (và đã thực hiện) ACL/Vai trò và tôi không sử dụng giàn giáo. Tôi chỉ có rất nhiều bộ điều khiển phần trước/quản trị viên sẽ giống nhau. Tôi muốn đặt bộ điều khiển quản trị trong thư mục con "/ admin" và có url giống như "/ admin" mà không sử dụng tiền tố. – seth

0

Tôi đã sử dụng ACL cho ứng dụng của mình và tôi thấy nó tốt hơn nhiều so với sử dụng định tuyến quản trị viên. Dễ dàng hơn nhiều. Nếu bạn thực sự muốn có một tiền tố, bạn có thể làm điều đó với định tuyến bình thường.

+0

Tôi đã sử dụng tiền tố ACL + (thực sự không thực sự là một thay đổi so với triển khai ban đầu của tôi). Tôi vẫn còn khá khó chịu tại cách bánh xử lý cấu trúc thư mục và tên tập tin và liên kết. Nó sẽ là lý tưởng nếu một bộ điều khiển nằm trong một thư mục "admin" mà sẽ trở thành một phần của đường dẫn url. – seth

1

Tôi đề nghị chỉ cần tách ứng dụng và quản trị viên mặt trước thành hai ứng dụng riêng biệt (/app/admin). Chỉ cần nghĩ về admin như một ứng dụng front-end đơn giản, làm tất cả các công việc "bẩn" với cơ sở dữ liệu.

Bằng cách làm như vậy, bạn sẽ có thể truy cập quản trị viên của mình bằng cách sử dụng/tiền tố quản trị trong URL hoặc đặt DocumentRoot thành/admin/webroot và quản trị viên truy cập bằng tên miền phụ (ví dụ: admin.myapp.com).

Để tránh trùng lặp mã mô hình, bạn có thể đặt mô hình của bạn vào một số thư mục chia sẻ (ví dụ: /vendors/core/models) và thêm đường dẫn này để mô hình đường dẫn trong bootstrap.php file (App::build('models' => array(VENDORS . 'core/models/')) cho CakePHP 1.3, $modelPaths = array(VENDORS . 'core/models/') cho CakePHP 1.2).

Để thêm quản trị viên hoặc các công cụ ứng dụng cụ thể để mô hình của bạn, bạn có thể mở rộng mô hình cốt lõi của bạn trong/mô hình, bằng cách tải mô hình cốt lõi và mở rộng nó:

App::import('Model', 'CoreModelName'); 

class CustomCoreModelA extends CoreModelA 
{ 
    function specificMethod() {} 
} 

Điều đó có thể được thực hiện cho các thành phần chia sẻ, hành vi , v.v.

+1

về việc sử dụng hai ứng dụng, tôi sẽ đồng ý và là một cái gì đó tôi có mặc dù về. nhưng các mô hình đưa vào nhà cung cấp của bạn là một hack xấu xí. thay vào đó, hãy sử dụng APP :: xây dựng trong một ứng dụng để trỏ đến các tệp mô hình trong một ứng dụng khác. có vấn đề với điều này đặc biệt là khi nói đến các plugin. rất chậm trong rất nhiều dir. – dogmatic69

+0

Bạn nói đúng, đặt các mô hình chia sẻ trong/nhà cung cấp dir là xấu xí và hacky, bằng cách sử dụng các mô hình ứng dụng khác dir để tra cứu các mô hình âm thanh tốt hơn. Vấn đề duy nhất là thiếu không gian tên, theo cách đó bạn sẽ phải thêm tiền tố cho tất cả các mô hình quản trị của mình. Điều gì về hiệu suất? Vâng, bạn phải chọn để có kiến ​​trúc sạch sẽ và bảo trì hoặc ứng dụng nhanh như chớp, nhưng với nhiều nhược điểm kiến ​​trúc. – ljank

1

ứng dụng ive được xây dựng bằng cách sử dụng định tuyến quản trị chứ không phải và phiên bản không phải lúc nào cũng là một mớ hỗn độn. nếu một số phương pháp của bạn giống nhau, bạn có thể làm như sau.

function add(){ 
$this->_add(); 
} 

function admin_add(){ 
$this->_add(); 
} 

function _add(){ 
... your code ... 
} 

tôi sẽ đặt cược của nó không phải tất cả code của bạn mà là như nhau, và không sử dụng quản trị định tuyến bạn sẽ kết thúc với rất nhiều mã làm if(... is admin ...) { echo 'blaa'} else { echo 'foo'; }

Các vấn đề liên quan