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

ControllerResolver.php

Zuletzt modifiziert: 09.10.2024, 12:58 - Dateigröße: 5.48 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\Controller;
 013   
 014  use Psr\Log\LoggerInterface;
 015  use Symfony\Component\HttpFoundation\Request;
 016   
 017  /**
 018   * ControllerResolver.
 019   *
 020   * This implementation uses the '_controller' request attribute to determine
 021   * the controller to execute and uses the request attributes to determine
 022   * the controller method arguments.
 023   *
 024   * @author Fabien Potencier <fabien@symfony.com>
 025   *
 026   * @api
 027   */
 028  class ControllerResolver implements ControllerResolverInterface
 029  {
 030      private $logger;
 031   
 032      /**
 033       * Constructor.
 034       *
 035       * @param LoggerInterface $logger A LoggerInterface instance
 036       */
 037      public function __construct(LoggerInterface $logger = null)
 038      {
 039          $this->logger = $logger;
 040      }
 041   
 042      /**
 043       * Returns the Controller instance associated with a Request.
 044       *
 045       * This method looks for a '_controller' request attribute that represents
 046       * the controller name (a string like ClassName::MethodName).
 047       *
 048       * @param Request $request A Request instance
 049       *
 050       * @return mixed|bool    A PHP callable representing the Controller,
 051       *                       or false if this resolver is not able to determine the controller
 052       *
 053       * @throws \InvalidArgumentException|\LogicException If the controller can't be found
 054       *
 055       * @api
 056       */
 057      public function getController(Request $request)
 058      {
 059          if (!$controller = $request->attributes->get('_controller')) {
 060              if (null !== $this->logger) {
 061                  $this->logger->warning('Unable to look for the controller as the "_controller" parameter is missing');
 062              }
 063   
 064              return false;
 065          }
 066   
 067          if (is_array($controller)) {
 068              return $controller;
 069          }
 070   
 071          if (is_object($controller)) {
 072              if (method_exists($controller, '__invoke')) {
 073                  return $controller;
 074              }
 075   
 076              throw new \InvalidArgumentException(sprintf('Controller "%s" for URI "%s" is not callable.', get_class($controller), $request->getPathInfo()));
 077          }
 078   
 079          if (false === strpos($controller, ':')) {
 080              if (method_exists($controller, '__invoke')) {
 081                  return new $controller();
 082              } elseif (function_exists($controller)) {
 083                  return $controller;
 084              }
 085          }
 086   
 087          $callable = $this->createController($controller);
 088   
 089          if (!is_callable($callable)) {
 090              throw new \InvalidArgumentException(sprintf('Controller "%s" for URI "%s" is not callable.', $controller, $request->getPathInfo()));
 091          }
 092   
 093          return $callable;
 094      }
 095   
 096      /**
 097       * Returns the arguments to pass to the controller.
 098       *
 099       * @param Request $request    A Request instance
 100       * @param mixed   $controller A PHP callable
 101       *
 102       * @return array
 103       *
 104       * @throws \RuntimeException When value for argument given is not provided
 105       *
 106       * @api
 107       */
 108      public function getArguments(Request $request, $controller)
 109      {
 110          if (is_array($controller)) {
 111              $r = new \ReflectionMethod($controller[0], $controller[1]);
 112          } elseif (is_object($controller) && !$controller instanceof \Closure) {
 113              $r = new \ReflectionObject($controller);
 114              $r = $r->getMethod('__invoke');
 115          } else {
 116              $r = new \ReflectionFunction($controller);
 117          }
 118   
 119          return $this->doGetArguments($request, $controller, $r->getParameters());
 120      }
 121   
 122      protected function doGetArguments(Request $request, $controller, array $parameters)
 123      {
 124          $attributes = $request->attributes->all();
 125          $arguments = array();
 126          foreach ($parameters as $param) {
 127              if (array_key_exists($param->name, $attributes)) {
 128                  $arguments[] = $attributes[$param->name];
 129              } elseif ($param->getClass() && $param->getClass()->isInstance($request)) {
 130                  $arguments[] = $request;
 131              } elseif ($param->isDefaultValueAvailable()) {
 132                  $arguments[] = $param->getDefaultValue();
 133              } else {
 134                  if (is_array($controller)) {
 135                      $repr = sprintf('%s::%s()', get_class($controller[0]), $controller[1]);
 136                  } elseif (is_object($controller)) {
 137                      $repr = get_class($controller);
 138                  } else {
 139                      $repr = $controller;
 140                  }
 141   
 142                  throw new \RuntimeException(sprintf('Controller "%s" requires that you provide a value for the "$%s" argument (because there is no default value or because there is a non optional argument after this one).', $repr, $param->name));
 143              }
 144          }
 145   
 146          return $arguments;
 147      }
 148   
 149      /**
 150       * Returns a callable for the given controller.
 151       *
 152       * @param string $controller A Controller string
 153       *
 154       * @return mixed A PHP callable
 155       *
 156       * @throws \InvalidArgumentException
 157       */
 158      protected function createController($controller)
 159      {
 160          if (false === strpos($controller, '::')) {
 161              throw new \InvalidArgumentException(sprintf('Unable to find controller "%s".', $controller));
 162          }
 163   
 164          list($class, $method) = explode('::', $controller, 2);
 165   
 166          if (!class_exists($class)) {
 167              throw new \InvalidArgumentException(sprintf('Class "%s" does not exist.', $class));
 168          }
 169   
 170          return array(new $class(), $method);
 171      }
 172  }
 173