3 * Zend Framework (http://framework.zend.com/)
5 * @link http://github.com/zendframework/zf2 for the canonical source repository
6 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7 * @license http://framework.zend.com/license/new-bsd New BSD License
12 use Zend\EventManager\AbstractListenerAggregate
;
13 use Zend\EventManager\EventManager
;
14 use Zend\EventManager\EventManagerAwareInterface
;
15 use Zend\EventManager\EventManagerInterface
;
16 use Zend\Mvc\ResponseSender\ConsoleResponseSender
;
17 use Zend\Mvc\ResponseSender\HttpResponseSender
;
18 use Zend\Mvc\ResponseSender\PhpEnvironmentResponseSender
;
19 use Zend\Mvc\ResponseSender\SendResponseEvent
;
20 use Zend\Mvc\ResponseSender\SimpleStreamResponseSender
;
21 use Zend\Stdlib\ResponseInterface
as Response
;
23 class SendResponseListener
extends AbstractListenerAggregate
implements
24 EventManagerAwareInterface
27 * @var SendResponseEvent
32 * @var EventManagerInterface
34 protected $eventManager;
37 * Inject an EventManager instance
39 * @param EventManagerInterface $eventManager
40 * @return SendResponseListener
42 public function setEventManager(EventManagerInterface
$eventManager)
44 $eventManager->setIdentifiers([
48 $this->eventManager
= $eventManager;
49 $this->attachDefaultListeners();
54 * Retrieve the event manager
56 * Lazy-loads an EventManager instance if none registered.
58 * @return EventManagerInterface
60 public function getEventManager()
62 if (!$this->eventManager
instanceof EventManagerInterface
) {
63 $this->setEventManager(new EventManager());
65 return $this->eventManager
;
69 * Attach the aggregate to the specified event manager
71 * @param EventManagerInterface $events
72 * @param int $priority
75 public function attach(EventManagerInterface
$events, $priority = 1)
77 $this->listeners
[] = $events->attach(MvcEvent
::EVENT_FINISH
, [$this, 'sendResponse'], -10000);
86 public function sendResponse(MvcEvent
$e)
88 $response = $e->getResponse();
89 if (!$response instanceof Response
) {
90 return; // there is no response to send
92 $event = $this->getEvent();
93 $event->setResponse($response);
94 $event->setTarget($this);
95 $this->getEventManager()->triggerEvent($event);
99 * Get the send response event
101 * @return SendResponseEvent
103 public function getEvent()
105 if (!$this->event
instanceof SendResponseEvent
) {
106 $this->setEvent(new SendResponseEvent());
112 * Set the send response event
114 * @param SendResponseEvent $e
115 * @return SendResponseEvent
117 public function setEvent(SendResponseEvent
$e)
124 * Register the default event listeners
126 * The order in which the response sender are listed here, is by their usage:
127 * PhpEnvironmentResponseSender has highest priority, because it's used most often.
128 * ConsoleResponseSender and SimpleStreamResponseSender are not used that often, yo they have a lower priority.
129 * You can attach your response sender before or after every default response sender implementation.
130 * All default response sender implementation have negative priority.
131 * You are able to attach listeners without giving a priority and your response sender would be first to try.
133 * @return SendResponseListener
135 protected function attachDefaultListeners()
137 $events = $this->getEventManager();
138 $events->attach(SendResponseEvent
::EVENT_SEND_RESPONSE
, new PhpEnvironmentResponseSender(), -1000);
139 $events->attach(SendResponseEvent
::EVENT_SEND_RESPONSE
, new ConsoleResponseSender(), -2000);
140 $events->attach(SendResponseEvent
::EVENT_SEND_RESPONSE
, new SimpleStreamResponseSender(), -3000);
141 $events->attach(SendResponseEvent
::EVENT_SEND_RESPONSE
, new HttpResponseSender(), -4000);