Source of file SendResponseListener.php
Size: 4,935 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/Mvc/SendResponseListener.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\Mvc; use Zend\EventManager\EventManager; use Zend\EventManager\EventManagerAwareInterface; use Zend\EventManager\EventManagerInterface; use Zend\EventManager\ListenerAggregateInterface; use Zend\Mvc\ResponseSender\ConsoleResponseSender; use Zend\Mvc\ResponseSender\HttpResponseSender; use Zend\Mvc\ResponseSender\PhpEnvironmentResponseSender; use Zend\Mvc\ResponseSender\SendResponseEvent; use Zend\Mvc\ResponseSender\SimpleStreamResponseSender; use Zend\Stdlib\ResponseInterface as Response; class SendResponseListener implements EventManagerAwareInterface, ListenerAggregateInterface { /** * @var \Zend\Stdlib\CallbackHandler[] */ protected $listeners = array(); /** * @var SendResponseEvent */ protected $event; /** * @var EventManagerInterface */ protected $eventManager; /** * Inject an EventManager instance * * @param EventManagerInterface $eventManager * @return SendResponseListener */ public function setEventManager(EventManagerInterface $eventManager) { $eventManager->setIdentifiers(array( __CLASS__, get_class($this), )); $this->eventManager = $eventManager; $this->attachDefaultListeners(); return $this; } /** * Retrieve the event manager * * Lazy-loads an EventManager instance if none registered. * * @return EventManagerInterface */ public function getEventManager() { if (!$this->eventManager instanceof EventManagerInterface) { $this->setEventManager(new EventManager()); } return $this->eventManager; } /** * Attach the aggregate to the specified event manager * * @param EventManagerInterface $events * @return void */ public function attach(EventManagerInterface $events) { $this->listeners[] = $events->attach(MvcEvent::EVENT_FINISH, array($this, 'sendResponse'), -10000); } /** * Detach aggregate listeners from the specified event manager * * @param EventManagerInterface $events * @return void */ public function detach(EventManagerInterface $events) { foreach ($this->listeners as $index => $listener) { if ($events->detach($listener)) { unset($this->listeners[$index]); } } } /** * Send the response * * @param MvcEvent $e * @return void */ public function sendResponse(MvcEvent $e) { $response = $e->getResponse(); if (!$response instanceof Response) { return; // there is no response to send } $event = $this->getEvent(); $event->setResponse($response); $event->setTarget($this); $this->getEventManager()->trigger($event); } /** * Get the send response event * * @return SendResponseEvent */ public function getEvent() { if (!$this->event instanceof SendResponseEvent) { $this->setEvent(new SendResponseEvent()); } return $this->event; } /** * Set the send response event * * @param SendResponseEvent $e * @return SendResponseEvent */ public function setEvent(SendResponseEvent $e) { $this->event = $e; return $this; } /** * Register the default event listeners * * The order in which the response sender are listed here, is by their usage: * PhpEnvironmentResponseSender has highest priority, because it's used most often. * ConsoleResponseSender and SimpleStreamResponseSender are not used that often, yo they have a lower priority. * You can attach your response sender before or after every default response sender implementation. * All default response sender implementation have negative priority. * You are able to attach listeners without giving a priority and your response sender would be first to try. * * @return SendResponseListener */ protected function attachDefaultListeners() { $events = $this->getEventManager(); $events->attach(SendResponseEvent::EVENT_SEND_RESPONSE, new PhpEnvironmentResponseSender(), -1000); $events->attach(SendResponseEvent::EVENT_SEND_RESPONSE, new ConsoleResponseSender(), -2000); $events->attach(SendResponseEvent::EVENT_SEND_RESPONSE, new SimpleStreamResponseSender(), -3000); $events->attach(SendResponseEvent::EVENT_SEND_RESPONSE, new HttpResponseSender(), -4000); } } |