fix travis build
[GitHub/Stricted/Domain-Control-Panel.git] / vendor / Zend / Mvc / SendResponseListener.php
CommitLineData
44d399bc
S
1<?php
2/**
3 * Zend Framework (http://framework.zend.com/)
4 *
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
8 */
9
10namespace Zend\Mvc;
11
12use Zend\EventManager\AbstractListenerAggregate;
13use Zend\EventManager\EventManager;
14use Zend\EventManager\EventManagerAwareInterface;
15use Zend\EventManager\EventManagerInterface;
16use Zend\Mvc\ResponseSender\ConsoleResponseSender;
17use Zend\Mvc\ResponseSender\HttpResponseSender;
18use Zend\Mvc\ResponseSender\PhpEnvironmentResponseSender;
19use Zend\Mvc\ResponseSender\SendResponseEvent;
20use Zend\Mvc\ResponseSender\SimpleStreamResponseSender;
21use Zend\Stdlib\ResponseInterface as Response;
22
23class SendResponseListener extends AbstractListenerAggregate implements
24 EventManagerAwareInterface
25{
26 /**
27 * @var SendResponseEvent
28 */
29 protected $event;
30
31 /**
32 * @var EventManagerInterface
33 */
34 protected $eventManager;
35
36 /**
37 * Inject an EventManager instance
38 *
39 * @param EventManagerInterface $eventManager
40 * @return SendResponseListener
41 */
42 public function setEventManager(EventManagerInterface $eventManager)
43 {
44 $eventManager->setIdentifiers([
45 __CLASS__,
46 get_class($this),
47 ]);
48 $this->eventManager = $eventManager;
49 $this->attachDefaultListeners();
50 return $this;
51 }
52
53 /**
54 * Retrieve the event manager
55 *
56 * Lazy-loads an EventManager instance if none registered.
57 *
58 * @return EventManagerInterface
59 */
60 public function getEventManager()
61 {
62 if (!$this->eventManager instanceof EventManagerInterface) {
63 $this->setEventManager(new EventManager());
64 }
65 return $this->eventManager;
66 }
67
68 /**
69 * Attach the aggregate to the specified event manager
70 *
71 * @param EventManagerInterface $events
72 * @param int $priority
73 * @return void
74 */
75 public function attach(EventManagerInterface $events, $priority = 1)
76 {
77 $this->listeners[] = $events->attach(MvcEvent::EVENT_FINISH, [$this, 'sendResponse'], -10000);
78 }
79
80 /**
81 * Send the response
82 *
83 * @param MvcEvent $e
84 * @return void
85 */
86 public function sendResponse(MvcEvent $e)
87 {
88 $response = $e->getResponse();
89 if (!$response instanceof Response) {
90 return; // there is no response to send
91 }
92 $event = $this->getEvent();
93 $event->setResponse($response);
94 $event->setTarget($this);
95 $this->getEventManager()->triggerEvent($event);
96 }
97
98 /**
99 * Get the send response event
100 *
101 * @return SendResponseEvent
102 */
103 public function getEvent()
104 {
105 if (!$this->event instanceof SendResponseEvent) {
106 $this->setEvent(new SendResponseEvent());
107 }
108 return $this->event;
109 }
110
111 /**
112 * Set the send response event
113 *
114 * @param SendResponseEvent $e
115 * @return SendResponseEvent
116 */
117 public function setEvent(SendResponseEvent $e)
118 {
119 $this->event = $e;
120 return $this;
121 }
122
123 /**
124 * Register the default event listeners
125 *
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.
132 *
133 * @return SendResponseListener
134 */
135 protected function attachDefaultListeners()
136 {
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);
142 }
143}