2013-06-25 13 views
6

Il documento ZF2 descrive Creating and Registering Alternate Rendering and Response Strategies. L'ho letto, ma non capisco davvero come usare una strategia.Che cosa significa esattamente la strategia di rendering/risposta in Zend Framework 2 e come utilizzarlo?

Ho una domanda, che dovrebbe spedire tre tipi di uscita (JSON, XML e HTML), sulla base dell'intestazione HTTP accettare. Come posso usare le strategie per questo caso?

+1

Un po 'da parte l'ambito della tua domanda, ma quello che ti serve è stato convertito in un 'ControllerPlugin' che è chiamato [' acceptableViewModelSelector() '] (http://zf2.readthedocs.org/en/latest/ moduli/zend.mvc.plugins.html # Zend-MVC-Controller-plugins-acceptableviewmodelselector). Questo dovrebbe coprire quello che ti serve;) – Sam

+0

Hey Sam! Grazie per il suggerimento! In realtà l'ho implementato con ['AcceptableViewModelSelector'] (http://framework.zend.com/manual/2.1/en/modules/zend.mvc.plugins.html#zend-mvc-controller-plugins-acceptableviewmodelselector) . Ma ora ho due problemi: 1. Se "Accept" contiene diversi tipi, la richiesta viene automaticamente inoltrata a "PhpRenderer". 2. Non riesco a impostare 'script_paths' per JSON/XML (per prepairare i dati per l'output, s [qui] (http://stackoverflow.com/questions/17275230/how-to-handle-multidimensional-output -con-nested-liste-con-la-table-Gatewa)). – automatix

+0

non troppo familiare, mi dispiace. Più intestazioni accettano non è la mia regione: D – Sam

risposta

5

Il concetto allentato di una strategia in Zend Framework 2 è il comportamento che l'applicazione deve seguire quando gli eventi vengono attivati ​​durante il ciclo dell'applicazione MVC, ovvero in effetti gestito dall'evento.

In termini più pratici, una strategia è fondamentalmente un listener di eventi, di solito un esempio concreto di \Zend\EventManager\AbstractListenerAggregate, e di solito ascolta \Zend\Mvc\MvcEvent vari eventi come EVENT_RENDER e EVENT_RENDER_ERROR.

L'ascoltatore è attaccato al \Zend\EventManager\EventManager e poi, usando il sopracitato \Zend\Mvc\MvcEvent per accedere a tutte le risorse fondamentali del ciclo MVC (router, richiesta, la risposta, l'applicazione stessa, ecc), l'ascoltatore può controllare lo stato del applicazione e alterarne il flusso.

Nell'esempio fornito da documentazione ufficiale ZF2, l'ascoltatore ispeziona accettare intestazioni del richiesta, seleziona un renderer e altera la risposta di conseguenza.

E 'un po' vecchio, però, così io suggerirei di guardare alcuni esempi migliori di lettura del codice delle strategie graffetta fornite dal framework, cioè \Zend\Mvc\View\Http\RouteNotFoundStrategy che ascolta EVENT_DISPATCH e EVENT_DISPATCH_ERROR per gestire il rendering di pagine di errore 404 .

Inoltre è di vitale importanza che si capisce come l'intera EventManager opere. I documenti ufficiali per questo sono abbastanza buoni, inoltre c'è un sacco di cose su di esso se si google in giro.

+5

Un paio di note: una "strategia" di solito affronta due eventi. Il primo è "render", la seconda "risposta". Nell'evento "render", la strategia in genere introspe il modello di vista per determinare se è in grado di renderlo. In tal caso, restituisce un renderer. Vince la prima strategia per restituire un renderer. L'evento "risposta" viene utilizzato per prendere i risultati del rendering e inserirli nell'oggetto risposta. Un caso d'uso comune è quello di iniettare intestazioni specifiche, come un Content-Type. – weierophinney

Problemi correlati