2012-05-15 26 views
5

Khi cố gắng tuân thủ các thực hành tốt nhất đã được thiết lập như tránh người dùng, đăng ký, thuộc tính tĩnh và bộ điều khiển cơ sở, cách bố trí bố cục của tôi (và partials được bố cục sử dụng) với dữ liệu chỉ được bố cục sử dụng và phổ biến trên tất cả các tác vụ ?Tôi có thể điền các biến Zend_Layout bằng dữ liệu phụ trợ như thế nào?

Kịch bản điển hình là menu được xây dựng trên dữ liệu biến, như cơ sở dữ liệu. Giữ tách các mối quan tâm trong tâm trí, các quan điểm/bố trí không bao giờ nên nói chuyện với một phụ trợ trực tiếp, nhưng thay vì được cho biết những gì để chứa.

Sử dụng plugin bộ điều khiển phía trước chỉ đơn giản là không thể sử dụng mà không sử dụng tính năng "đơn" trong Zend_Layout. Plugin chỉ biết đối tượng yêu cầu và phản hồi, không có quyền truy cập vào bộ điều khiển, chế độ xem hoặc bố cục.

Người trợ giúp hành động của Zend có phương thức init/preDispatch/postDispatch. Người ta có thể thêm những người trợ giúp hành động cho HelperBroker (ví dụ: sử dụng bootstrap) và những điều này sẽ được thực hiện trong luồng ứng dụng thông thường.

Sử dụng phương pháp init để chèn dữ liệu vào chế độ xem là không thể vì nó được ghép trước khi bộ điều khiển/chế độ xem sẵn sàng. preDispatch/postDispatch là có thể, nhưng không hoàn hảo, vì các phương thức này là luôn luôn được kích hoạt khi thực hiện một thao tác điều khiển.

Điều đó có nghĩa là tất cả các ứng dụng của Zend_Controller_Action :: _ forward() cũng sẽ thực thi preDispatch/postDispatch trong tất cả các trình trợ giúp hành động. Điều này không có bất kỳ ý nghĩa lớn cho mã ngoại trừ tốc độ, tôi thực sự không muốn thiết lập một lần xem (hoặc một trợ giúp xem) biến nhiều lần. Người ta có thể mã xung quanh vấn đề này bằng cách sử dụng một số biến $ firstRun, nhưng tôi thực sự không muốn theo dõi điều này trong mã của riêng tôi.

Phương pháp khác đang thực hiện việc này trong bootstrap, nhưng theo ý kiến ​​của tôi, nó thực sự không thuộc về đó.

Vì vậy, làm cách nào tôi có thể điền bố cục/trợ giúp xem của mình với dữ liệu từ cơ sở dữ liệu, chỉ thực hiện một lần mà vẫn giữ được mối quan tâm tốt?

Trả lời

0

Tôi đã làm theo phương pháp ActionHelper, đặt các biến chế độ xem theo phương pháp preDispatch. Đó là nơi hợp lý nhất, theo ý kiến ​​của tôi. Ngoài ra, các dự án của tôi không sử dụng Zend_Controller_Action::_forward(), vì vậy tôi không có bất kỳ lo ngại về tốc độ nào về việc kích hoạt nhiều trình trợ giúp.

Hy vọng rằng sẽ giúp,

0

Bạn có thể đi với Helpers hành động như đã nêu trong answer này (hãy nhìn vào những câu hỏi quá, nó khá nhiều giống như của bạn)

0

Tôi muốn sử dụng người giúp đỡ hành động quá . Chỉ cần điền vào các biến hiển thị và hiển thị chúng bằng cách sử dụng PHP/partials/render/viewHelper đơn giản (tùy thuộc vào độ phức tạp).

Vấn đề của bạn với nhiều chạy bằng preDispatch thể được giải quyết bằng

if (!($this->view->myVar)) { // or array_key_exist or isset - depending on your use case 
    $this->view->myVar = $someModel->getSomeData(); 
} 

Đó là tốt IMO.

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