Verzeichnisstruktur phpBB-3.1.0
- Veröffentlicht
- 27.10.2014
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
RequestDataCollector.php
001 <?php
002
003 /*
004 * This file is part of the Symfony package.
005 *
006 * (c) Fabien Potencier <fabien@symfony.com>
007 *
008 * For the full copyright and license information, please view the LICENSE
009 * file that was distributed with this source code.
010 */
011
012 namespace Symfony\Component\HttpKernel\DataCollector;
013
014 use Symfony\Component\HttpFoundation\ParameterBag;
015 use Symfony\Component\HttpFoundation\HeaderBag;
016 use Symfony\Component\HttpFoundation\Request;
017 use Symfony\Component\HttpFoundation\Response;
018 use Symfony\Component\HttpFoundation\ResponseHeaderBag;
019 use Symfony\Component\HttpKernel\KernelEvents;
020 use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
021 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
022
023 /**
024 * RequestDataCollector.
025 *
026 * @author Fabien Potencier <fabien@symfony.com>
027 */
028 class RequestDataCollector extends DataCollector implements EventSubscriberInterface
029 {
030 protected $controllers;
031
032 public function __construct()
033 {
034 $this->controllers = new \SplObjectStorage();
035 }
036
037 /**
038 * {@inheritdoc}
039 */
040 public function collect(Request $request, Response $response, \Exception $exception = null)
041 {
042 $responseHeaders = $response->headers->all();
043 $cookies = array();
044 foreach ($response->headers->getCookies() as $cookie) {
045 $cookies[] = $this->getCookieHeader($cookie->getName(), $cookie->getValue(), $cookie->getExpiresTime(), $cookie->getPath(), $cookie->getDomain(), $cookie->isSecure(), $cookie->isHttpOnly());
046 }
047 if (count($cookies) > 0) {
048 $responseHeaders['Set-Cookie'] = $cookies;
049 }
050
051 $attributes = array();
052 foreach ($request->attributes->all() as $key => $value) {
053 if ('_route' === $key && is_object($value)) {
054 $attributes['_route'] = $this->varToString($value->getPath());
055 } elseif ('_route_params' === $key) {
056 foreach ($value as $key => $v) {
057 $attributes['_route_params'][$key] = $this->varToString($v);
058 }
059 } else {
060 $attributes[$key] = $this->varToString($value);
061 }
062 }
063
064 $content = null;
065 try {
066 $content = $request->getContent();
067 } catch (\LogicException $e) {
068 // the user already got the request content as a resource
069 $content = false;
070 }
071
072 $sessionMetadata = array();
073 $sessionAttributes = array();
074 $flashes = array();
075 if ($request->hasSession()) {
076 $session = $request->getSession();
077 if ($session->isStarted()) {
078 $sessionMetadata['Created'] = date(DATE_RFC822, $session->getMetadataBag()->getCreated());
079 $sessionMetadata['Last used'] = date(DATE_RFC822, $session->getMetadataBag()->getLastUsed());
080 $sessionMetadata['Lifetime'] = $session->getMetadataBag()->getLifetime();
081 $sessionAttributes = $session->all();
082 $flashes = $session->getFlashBag()->peekAll();
083 }
084 }
085
086 $statusCode = $response->getStatusCode();
087
088 $this->data = array(
089 'format' => $request->getRequestFormat(),
090 'content' => $content,
091 'content_type' => $response->headers->get('Content-Type') ? $response->headers->get('Content-Type') : 'text/html',
092 'status_text' => isset(Response::$statusTexts[$statusCode]) ? Response::$statusTexts[$statusCode] : '',
093 'status_code' => $statusCode,
094 'request_query' => $request->query->all(),
095 'request_request' => $request->request->all(),
096 'request_headers' => $request->headers->all(),
097 'request_server' => $request->server->all(),
098 'request_cookies' => $request->cookies->all(),
099 'request_attributes' => $attributes,
100 'response_headers' => $responseHeaders,
101 'session_metadata' => $sessionMetadata,
102 'session_attributes' => $sessionAttributes,
103 'flashes' => $flashes,
104 'path_info' => $request->getPathInfo(),
105 'controller' => 'n/a',
106 'locale' => $request->getLocale(),
107 );
108
109 if (isset($this->data['request_headers']['php-auth-pw'])) {
110 $this->data['request_headers']['php-auth-pw'] = '******';
111 }
112
113 if (isset($this->data['request_server']['PHP_AUTH_PW'])) {
114 $this->data['request_server']['PHP_AUTH_PW'] = '******';
115 }
116
117 if (isset($this->controllers[$request])) {
118 $controller = $this->controllers[$request];
119 if (is_array($controller)) {
120 try {
121 $r = new \ReflectionMethod($controller[0], $controller[1]);
122 $this->data['controller'] = array(
123 'class' => is_object($controller[0]) ? get_class($controller[0]) : $controller[0],
124 'method' => $controller[1],
125 'file' => $r->getFilename(),
126 'line' => $r->getStartLine(),
127 );
128 } catch (\ReflectionException $re) {
129 if (is_callable($controller)) {
130 // using __call or __callStatic
131 $this->data['controller'] = array(
132 'class' => is_object($controller[0]) ? get_class($controller[0]) : $controller[0],
133 'method' => $controller[1],
134 'file' => 'n/a',
135 'line' => 'n/a',
136 );
137 }
138 }
139 } elseif ($controller instanceof \Closure) {
140 $r = new \ReflectionFunction($controller);
141 $this->data['controller'] = array(
142 'class' => $r->getName(),
143 'method' => null,
144 'file' => $r->getFilename(),
145 'line' => $r->getStartLine(),
146 );
147 } else {
148 $this->data['controller'] = (string) $controller ?: 'n/a';
149 }
150 unset($this->controllers[$request]);
151 }
152 }
153
154 public function getPathInfo()
155 {
156 return $this->data['path_info'];
157 }
158
159 public function getRequestRequest()
160 {
161 return new ParameterBag($this->data['request_request']);
162 }
163
164 public function getRequestQuery()
165 {
166 return new ParameterBag($this->data['request_query']);
167 }
168
169 public function getRequestHeaders()
170 {
171 return new HeaderBag($this->data['request_headers']);
172 }
173
174 public function getRequestServer()
175 {
176 return new ParameterBag($this->data['request_server']);
177 }
178
179 public function getRequestCookies()
180 {
181 return new ParameterBag($this->data['request_cookies']);
182 }
183
184 public function getRequestAttributes()
185 {
186 return new ParameterBag($this->data['request_attributes']);
187 }
188
189 public function getResponseHeaders()
190 {
191 return new ResponseHeaderBag($this->data['response_headers']);
192 }
193
194 public function getSessionMetadata()
195 {
196 return $this->data['session_metadata'];
197 }
198
199 public function getSessionAttributes()
200 {
201 return $this->data['session_attributes'];
202 }
203
204 public function getFlashes()
205 {
206 return $this->data['flashes'];
207 }
208
209 public function getContent()
210 {
211 return $this->data['content'];
212 }
213
214 public function getContentType()
215 {
216 return $this->data['content_type'];
217 }
218
219 public function getStatusText()
220 {
221 return $this->data['status_text'];
222 }
223
224 public function getStatusCode()
225 {
226 return $this->data['status_code'];
227 }
228
229 public function getFormat()
230 {
231 return $this->data['format'];
232 }
233
234 public function getLocale()
235 {
236 return $this->data['locale'];
237 }
238
239 /**
240 * Gets the route name.
241 *
242 * The _route request attributes is automatically set by the Router Matcher.
243 *
244 * @return string The route
245 */
246 public function getRoute()
247 {
248 return isset($this->data['request_attributes']['_route']) ? $this->data['request_attributes']['_route'] : '';
249 }
250
251 /**
252 * Gets the route parameters.
253 *
254 * The _route_params request attributes is automatically set by the RouterListener.
255 *
256 * @return array The parameters
257 */
258 public function getRouteParams()
259 {
260 return isset($this->data['request_attributes']['_route_params']) ? $this->data['request_attributes']['_route_params'] : array();
261 }
262
263 /**
264 * Gets the controller.
265 *
266 * @return string The controller as a string
267 */
268 public function getController()
269 {
270 return $this->data['controller'];
271 }
272
273 public function onKernelController(FilterControllerEvent $event)
274 {
275 $this->controllers[$event->getRequest()] = $event->getController();
276 }
277
278 public static function getSubscribedEvents()
279 {
280 return array(KernelEvents::CONTROLLER => 'onKernelController');
281 }
282
283 /**
284 * {@inheritdoc}
285 */
286 public function getName()
287 {
288 return 'request';
289 }
290
291 private function getCookieHeader($name, $value, $expires, $path, $domain, $secure, $httponly)
292 {
293 $cookie = sprintf('%s=%s', $name, urlencode($value));
294
295 if (0 !== $expires) {
296 if (is_numeric($expires)) {
297 $expires = (int) $expires;
298 } elseif ($expires instanceof \DateTime) {
299 $expires = $expires->getTimestamp();
300 } else {
301 $tmp = strtotime($expires);
302 if (false === $tmp || -1 == $tmp) {
303 throw new \InvalidArgumentException(sprintf('The "expires" cookie parameter is not valid (%s).', $expires));
304 }
305 $expires = $tmp;
306 }
307
308 $cookie .= '; expires='.str_replace('+0000', '', \DateTime::createFromFormat('U', $expires, new \DateTimeZone('GMT'))->format('D, d-M-Y H:i:s T'));
309 }
310
311 if ($domain) {
312 $cookie .= '; domain='.$domain;
313 }
314
315 $cookie .= '; path='.$path;
316
317 if ($secure) {
318 $cookie .= '; secure';
319 }
320
321 if ($httponly) {
322 $cookie .= '; httponly';
323 }
324
325 return $cookie;
326 }
327 }
328