2013-06-25 7 views
6

Dokument ZF2 opisuje Creating and Registering Alternate Rendering and Response Strategies. Czytałem o tym, ale tak naprawdę nie rozumiem, jak korzystać ze strategii.Co dokładnie oznacza strategia renderowania/odpowiedzi w Zend Framework 2 i jak z niej korzystać?

Mam aplikację, która powinna wysyłać trzy typy danych wyjściowych (JSON, XML i HTML), w zależności od akceptowanego nagłówka HTTP. Jak mogę wykorzystać strategie w tej sprawie?

+1

Nieco pomijasz zakres twojego pytania, ale to, czego potrzebujesz, zostało faktycznie przekształcone w 'ControllerPlugin', które nazywa się' acceptableViewModelSelector() '] (http://zf2.readthedocs.org/en/latest/ modules/zend.mvc.plugins.html # zend-mvc-controller-plugins-acceptableviewmodelselector). To powinno obejmować to, czego potrzebujesz;) – Sam

+0

Hej Sam! Dziękuję za podpowiedź! Właściwie to zaimplementowałem go za pomocą ['AcceptableViewModelSelector'] (http://framework.zend.com/manual/2.1/en/modules/zend.mvc.plugins.html#zend-mvc-controller-plugins-acceptableviewmodelselector) . Ale teraz mam z tym dwa problemy: 1. Jeśli "Accept" zawiera kilka typów, żądanie jest automatycznie przekazywane do 'PhpRenderer'. 2. Nie mogę ustawić 'script_paths' dla JSON/XML (w celu przygotowania danych dla wyjścia, s. [Tutaj] (http://stackoverflow.com/questions/17275230/how-to-handle-multidimensional-output -with-nested-list-using-the-table-gatewa)). – automatix

+0

niezbyt z nim zaznajomiony, przepraszam. Wiele nagłówków akceptujących nie jest moim regionem: D – Sam

Odpowiedz

5

Luźną koncepcją strategii w Zend Framework 2 jest zachowanie, które aplikacja powinna stosować po uruchomieniu zdarzeń w cyklu aplikacji MVC, czyli w rzeczywistości sterowane zdarzeniami.

W bardziej praktycznego punktu widzenia, strategia jest w zasadzie detektor zdarzeń, zwykle konkretny przypadek \Zend\EventManager\AbstractListenerAggregate i zazwyczaj słucha \Zend\Mvc\MvcEvent różnych wydarzeń, takich jak EVENT_RENDER i EVENT_RENDER_ERROR.

Słuchacz jest dołączony do \Zend\EventManager\EventManager, a następnie za pomocą udostępnionego \Zend\Mvc\MvcEvent uzyskać dostęp do wszystkich podstawowych zasobów cyklu MVC (router, żądanie, odpowiedź, sama aplikacja itp.), Słuchacz może sprawdzić stan aplikacja i zmienić jej przepływ.

W przykładzie przedstawionym przez oficjalne dokumenty ZF2, słuchacz sprawdza nagłówki akceptacji żądania, wybiera mechanizm renderujący i odpowiednio zmienia odpowiedź.

To jest trochę stary choć, więc sugeruję, aby spojrzeć na niektórych lepszych przykładów odczytanie kodu strategii odcinkowych świadczonych przez ramy, tzn \Zend\Mvc\View\Http\RouteNotFoundStrategy który słucha EVENT_DISPATCH i EVENT_DISPATCH_ERROR obsłużyć renderowania 404 stron błędów .

Niezwykle ważne jest również zrozumienie działania całego zestawu EventManager. Oficjalne dokumenty na ten temat są całkiem dobre, plus jest wiele rzeczy na ten temat, jeśli znajdziesz go w pobliżu.

+5

Kilka notatek: "strategia" zazwyczaj odnosi się do dwóch zdarzeń. Pierwszym z nich jest "render", druga "odpowiedź". W zdarzeniu "render" strategia będzie zazwyczaj analizować widok modelu widoku w celu określenia, czy jest on zdolny do renderowania. Jeśli tak, zwraca renderer. Pierwsza strategia zwracania renderera wygrywa. Zdarzenie "response" jest używane do wykonania wyników renderowania i przekazania ich do obiektu odpowiedzi. Typowym przykładem użycia jest również wstrzykiwanie określonych nagłówków, takich jak Content-Type. – weierophinney