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.
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
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
niezbyt z nim zaznajomiony, przepraszam. Wiele nagłówków akceptujących nie jest moim regionem: D – Sam