2009-06-02 30 views
10

Tôi đang làm việc để xây dựng giao diện mà tôi muốn hoạt động như một loại chức năng "duyệt theo thẻ". Mỗi tab trong số các tab này đã được viết dưới dạng hành động và giao diện tab hoạt động tốt như liên kết đến các tab riêng lẻ. Tôi quyết định thử viết trang "index" cho bộ điều khiển này - đưa nội dung của tất cả các tab vào các div ẩn và trao đổi giữa chúng với jQuery, nhưng một khi tôi bắt đầu sử dụng trình trợ giúp xem hành động - tôi đã gặp rất nhiều người nói thực hành tồi tệ của nó. (see this article)Trình trợ giúp xem hành động trong Zend - Làm việc xung quanh?

Một số hành động này tạo biểu mẫu - lấy một số dữ liệu từ mô hình, v.v. để hiển thị. Tôi muốn mỗi hành động tiếp tục hoạt động một mình (một số dạng phân tích cú pháp).

Duyệt đến/mục sẽ cung cấp cho bạn menu tab, cùng với tất cả nội dung của div trong thẻ ẩn - trong đó/mục/tab2 là một hành động cụ thể (ví dụ như gửi biểu mẫu).

Một biến chứng khác/báo trước - Một số hành động sẽ ném Ngoại lệ truy cập nếu người dùng không có quyền truy cập vào "tab" đó. Tôi không muốn xây dựng kiểm tra truy cập vào hệ thống hai lần (do đó hiển thị một tab có nội dung trống).

Tôi chỉ đang cố gắng tìm ra cách thực hành tốt nhất là xử lý loại điều này, và tôi nghĩ rằng người trợ giúp hành động có thể là nó. Nếu tôi cố gắng sử dụng View Helpers - tôi bắt đầu tự hỏi nếu đó là nơi thích hợp để lắp ráp một Zend_Form.

Có ai có bất kỳ đề xuất nào về cách "thích hợp" để làm việc xung quanh không sử dụng Zend_View_Helper_Action không?

Trả lời

7

cách chính xác để làm việc xung quanh quan điểm hành động helper, như tôi đã trình bày trong bài viết bạn đã trích dẫn, là tạo ra partials mà truy cập trực tiếp vào mô hình để tìm nạp dữ liệu họ cần. Điều này có thể được thông qua một trợ giúp xem (bạn thực hiện điều này cho mình;)) nếu điều này sẽ liên quan đến rất nhiều logic trong quan điểm của bạn.

Trình trợ giúp xem hành động không chỉ là vấn đề hiệu suất mà còn tạo ra những cơn ác mộng, và nếu bạn cần, thì ứng dụng của bạn có thể không theo MVC, và do đó, bạn đang sử dụng bộ điều khiển để sử dụng lại, thay vì mô hình, đó là ý định mô hình.

Bạn có thể hiển thị partials từ bên trong bố cục hoặc chế độ xem tác vụ hiện tại bằng phương thức hiển thị hoặc một phần của đối tượng chế độ xem.

Nếu bạn có nhiều hành động để xử lý nhiều bài đăng có thể từ các tab của mình, thì bạn nên đặt tất cả các hành động này để hiển thị cùng một tập lệnh xem, sau đó sẽ hiển thị tất cả các tab có dữ liệu trực tiếp từ mô hình.

1

Nếu bạn không tạo tab tab/tab từ đánh dấu hiện tại và đang tải nội dung theo yêu cầu, bạn chỉ cần kiểm tra xem người dùng có quyền truy cập vào tab trước khi hiển thị tab hay không một lần nữa khi cố gắng tải nội dung của tab.

Kiểm tra xem người dùng có các quyền truy cập này phải là phương thức hoạt động có thể chấp nhận được và không nên tốn kém để thực hiện.

Nếu những hành động này sản xuất nội dung hoạt động trong một số trang độc lập, ngoài các tab, thì trình trợ giúp Chế độ xem hành động là cách khắc phục để tiếp tục. Chỉ cần thực hiện kiểm tra ACL (hoặc khác) tương tự được thực hiện trong hành động khi tạo tab.

1

Tôi không hoàn toàn chắc chắn rằng vấn đề chính xác của bạn là gì, tuy nhiên bạn có thể vô hiệu hóa việc bố trí:

$this->_helper->layout->disableLayout(); 

Sau đó, hành động yêu cầu sẽ chỉ hiển thị nó là xem kịch bản, mà bạn có thể tải vào tab.

Bất kỳ mã ủy quyền nào bạn có sẽ hoạt động như bình thường và bạn có thể hiển thị tập lệnh xem được yêu cầu cho Tác vụ hoặc không phụ thuộc vào họ có quyền truy cập hay không.

0

Bạn có thể bắt bất kỳ trường hợp ngoại lệ truy cập bằng cách sử dụng một khối try/catch:

try { // action throwing exceptions } catch (Exception $e) { // catch silently } 
+0

Thực tế - rất nhiều thứ khác bị rối tung lên khi thực hiện việc này với trình trợ giúp xem hành động. Tôi đã gửi một bản sửa lỗi cho nó trong JIRA – gnarf

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