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.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

InlineFragmentRenderer.php

Zuletzt modifiziert: 09.10.2024, 12:58 - Dateigröße: 5.28 KiB


 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\Fragment;
 013   
 014  use Symfony\Component\HttpFoundation\Request;
 015  use Symfony\Component\HttpFoundation\Response;
 016  use Symfony\Component\HttpKernel\HttpKernelInterface;
 017  use Symfony\Component\HttpKernel\Controller\ControllerReference;
 018  use Symfony\Component\HttpKernel\KernelEvents;
 019  use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
 020  use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 021   
 022  /**
 023   * Implements the inline rendering strategy where the Request is rendered by the current HTTP kernel.
 024   *
 025   * @author Fabien Potencier <fabien@symfony.com>
 026   */
 027  class InlineFragmentRenderer extends RoutableFragmentRenderer
 028  {
 029      private $kernel;
 030      private $dispatcher;
 031   
 032      /**
 033       * Constructor.
 034       *
 035       * @param HttpKernelInterface           $kernel     A HttpKernelInterface instance
 036       * @param EventDispatcherInterface|null $dispatcher A EventDispatcherInterface instance
 037       */
 038      public function __construct(HttpKernelInterface $kernel, EventDispatcherInterface $dispatcher = null)
 039      {
 040          $this->kernel = $kernel;
 041          $this->dispatcher = $dispatcher;
 042      }
 043   
 044      /**
 045       * {@inheritdoc}
 046       *
 047       * Additional available options:
 048       *
 049       *  * alt: an alternative URI to render in case of an error
 050       */
 051      public function render($uri, Request $request, array $options = array())
 052      {
 053          $reference = null;
 054          if ($uri instanceof ControllerReference) {
 055              $reference = $uri;
 056   
 057              // Remove attributes from the generated URI because if not, the Symfony
 058              // routing system will use them to populate the Request attributes. We don't
 059              // want that as we want to preserve objects (so we manually set Request attributes
 060              // below instead)
 061              $attributes = $reference->attributes;
 062              $reference->attributes = array();
 063   
 064              // The request format and locale might have been overriden by the user
 065              foreach (array('_format', '_locale') as $key) {
 066                  if (isset($attributes[$key])) {
 067                      $reference->attributes[$key] = $attributes[$key];
 068                  }
 069              }
 070   
 071              $uri = $this->generateFragmentUri($uri, $request);
 072              $reference->attributes = array_merge($attributes, $reference->attributes);
 073          }
 074   
 075          $subRequest = $this->createSubRequest($uri, $request);
 076   
 077          // override Request attributes as they can be objects (which are not supported by the generated URI)
 078          if (null !== $reference) {
 079              $subRequest->attributes->add($reference->attributes);
 080          }
 081   
 082          $level = ob_get_level();
 083          try {
 084              return $this->kernel->handle($subRequest, HttpKernelInterface::SUB_REQUEST, false);
 085          } catch (\Exception $e) {
 086              // we dispatch the exception event to trigger the logging
 087              // the response that comes back is simply ignored
 088              if (isset($options['ignore_errors']) && $options['ignore_errors'] && $this->dispatcher) {
 089                  $event = new GetResponseForExceptionEvent($this->kernel, $request, HttpKernelInterface::SUB_REQUEST, $e);
 090   
 091                  $this->dispatcher->dispatch(KernelEvents::EXCEPTION, $event);
 092              }
 093   
 094              // let's clean up the output buffers that were created by the sub-request
 095              while (ob_get_level() > $level) {
 096                  ob_get_clean();
 097              }
 098   
 099              if (isset($options['alt'])) {
 100                  $alt = $options['alt'];
 101                  unset($options['alt']);
 102   
 103                  return $this->render($alt, $request, $options);
 104              }
 105   
 106              if (!isset($options['ignore_errors']) || !$options['ignore_errors']) {
 107                  throw $e;
 108              }
 109   
 110              return new Response();
 111          }
 112      }
 113   
 114      protected function createSubRequest($uri, Request $request)
 115      {
 116          $cookies = $request->cookies->all();
 117          $server = $request->server->all();
 118   
 119          // Override the arguments to emulate a sub-request.
 120          // Sub-request object will point to localhost as client ip and real client ip
 121          // will be included into trusted header for client ip
 122          try {
 123              if ($trustedHeaderName = Request::getTrustedHeaderName(Request::HEADER_CLIENT_IP)) {
 124                  $currentXForwardedFor = $request->headers->get($trustedHeaderName, '');
 125   
 126                  $server['HTTP_'.$trustedHeaderName] = ($currentXForwardedFor ? $currentXForwardedFor.', ' : '').$request->getClientIp();
 127              }
 128          } catch (\InvalidArgumentException $e) {
 129              // Do nothing
 130          }
 131   
 132          $server['REMOTE_ADDR'] = '127.0.0.1';
 133   
 134          $subRequest = $request::create($uri, 'get', array(), $cookies, array(), $server);
 135          if ($request->headers->has('Surrogate-Capability')) {
 136              $subRequest->headers->set('Surrogate-Capability', $request->headers->get('Surrogate-Capability'));
 137          }
 138   
 139          if ($session = $request->getSession()) {
 140              $subRequest->setSession($session);
 141          }
 142   
 143          return $subRequest;
 144      }
 145   
 146      /**
 147       * {@inheritdoc}
 148       */
 149      public function getName()
 150      {
 151          return 'inline';
 152      }
 153  }
 154