2013-06-25 1 views
6

Документ ZF2 описывает Creating and Registering Alternate Rendering and Response Strategies. Я читал это, но я действительно не понимаю, как использовать стратегию.Что означает стратегия рендеринга/ответа в Zend Framework 2 и как ее использовать?

У меня есть приложение, которое должно отправлять три типа вывода (JSON, XML и HTML), в зависимости от заголовка HTTP. Как я могу использовать стратегии для этого случая?

+1

Немного в стороне от объема вашего вопроса, но то, что вам нужно, фактически было преобразовано в 'ControllerPlugin', который называется ['approViewModelSelector()'] (http://zf2.readthedocs.org/en/latest/ модули/zend.mvc.plugins.html # Зенд-MVC-контроллер-плагинов-acceptableviewmodelselector). Это должно покрыть то, что вам нужно;) – Sam

+0

Эй, Сэм! Спасибо за подсказку! Фактически я реализовал его с помощью ['AcceptableViewModelSelector'] (http://framework.zend.com/manual/2.1/en/modules/zend.mvc.plugins.html#zend-mvc-controller-plugins-acceptableviewmodelselector) , Но теперь у меня есть две проблемы с ним: 1. Если 'Accept' содержит несколько типов, запрос автоматически пересылается в' PhpRenderer'. 2. Я не могу установить 'script_paths' для JSON/XML (для предварительной обработки данных для вывода, s. [Здесь] (http://stackoverflow.com/questions/17275230/how-to-handle-multidimensional-output -с-гнездовые-листы, с помощью самой таблицы-gatewa)). – automatix

+0

не слишком хорошо знаком с этим, извините. Множество принимающих заголовков на самом деле не мой регион: D – Sam

ответ

5

Несложная концепция стратегии в Zend Framework 2 - это поведение, которое приложение должно соблюдать, когда события запускаются во время цикла приложения MVC, что фактически является событийным событием.

С практической точки зрения, стратегия в основном прослушиватель события, как правило, конкретный экземпляр \Zend\EventManager\AbstractListenerAggregate, и обычно слушает \Zend\Mvc\MvcEvent различные события, как EVENT_RENDER и EVENT_RENDER_ERROR.

Слушателя прикрепляется к \Zend\EventManager\EventManager, а затем, с помощью упомянутых выше \Zend\Mvc\MvcEvent, чтобы получить доступ ко всем основным ресурсам цикла MVC (маршрутизатор, запрос, ответ, само приложение, и т.д.), слушатель может проверить состояние из приложения и изменить его поток.

В примере, предоставленном официальными документами ZF2, слушатель проверяет заголовки принятия запроса, выбирает средство визуализации и соответственно изменяет ответ.

Это немного старое, поэтому я бы предложил взглянуть на некоторых лучшие примеры чтения коды стратегий основных предусмотренных рамок, т.е. \Zend\Mvc\View\Http\RouteNotFoundStrategy, который слушает EVENT_DISPATCH и EVENT_DISPATCH_ERROR обрабатывать рендеринг страниц 404 ошибок ,

Также жизненно важно, чтобы вы понимали, как работает весь EventManager. Официальные документы для этого неплохие, плюс много об этом, если вы рекламируете Google.

+5

Пара примечаний: «Стратегия» обычно затрагивает два события. Первый - «рендер», второй «ответ». В событии «render» стратегия, как правило, исследует модель представления, чтобы определить, способна ли она ее визуализировать. Если это так, он возвращает средство визуализации. Побеждает первая стратегия возврата рендера. Событие «ответ» используется для получения результатов рендеринга и нажатия их в объект ответа. Обычный вариант использования - также вводить определенные заголовки, например Content-Type. – weierophinney