Verzeichnisstruktur phpBB-3.3.15


Veröffentlicht
28.08.2024

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

ArgumentResolver.php

Zuletzt modifiziert: 02.04.2025, 15:03 - Dateigröße: 3.46 KiB


01  <?php
02   
03  /*
04   * This file is part of the Symfony package.
05   *
06   * (c) Fabien Potencier <fabien@symfony.com>
07   *
08   * For the full copyright and license information, please view the LICENSE
09   * file that was distributed with this source code.
10   */
11   
12  namespace Symfony\Component\HttpKernel\Controller;
13   
14  use Symfony\Component\HttpFoundation\Request;
15  use Symfony\Component\HttpKernel\Controller\ArgumentResolver\DefaultValueResolver;
16  use Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestAttributeValueResolver;
17  use Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestValueResolver;
18  use Symfony\Component\HttpKernel\Controller\ArgumentResolver\SessionValueResolver;
19  use Symfony\Component\HttpKernel\Controller\ArgumentResolver\VariadicValueResolver;
20  use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadataFactory;
21  use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadataFactoryInterface;
22   
23  /**
24   * Responsible for resolving the arguments passed to an action.
25   *
26   * @author Iltar van der Berg <kjarli@gmail.com>
27   */
28  final class ArgumentResolver implements ArgumentResolverInterface
29  {
30      private $argumentMetadataFactory;
31   
32      /**
33       * @var iterable|ArgumentValueResolverInterface[]
34       */
35      private $argumentValueResolvers;
36   
37      public function __construct(ArgumentMetadataFactoryInterface $argumentMetadataFactory = null, $argumentValueResolvers = [])
38      {
39          $this->argumentMetadataFactory = $argumentMetadataFactory ?: new ArgumentMetadataFactory();
40          $this->argumentValueResolvers = $argumentValueResolvers ?: self::getDefaultArgumentValueResolvers();
41      }
42   
43      /**
44       * {@inheritdoc}
45       */
46      public function getArguments(Request $request, $controller)
47      {
48          $arguments = [];
49   
50          foreach ($this->argumentMetadataFactory->createArgumentMetadata($controller) as $metadata) {
51              foreach ($this->argumentValueResolvers as $resolver) {
52                  if (!$resolver->supports($request, $metadata)) {
53                      continue;
54                  }
55   
56                  $resolved = $resolver->resolve($request, $metadata);
57   
58                  if (!$resolved instanceof \Generator) {
59                      throw new \InvalidArgumentException(sprintf('"%s::resolve()" must yield at least one value.', \get_class($resolver)));
60                  }
61   
62                  foreach ($resolved as $append) {
63                      $arguments[] = $append;
64                  }
65   
66                  // continue to the next controller argument
67                  continue 2;
68              }
69   
70              $representative = $controller;
71   
72              if (\is_array($representative)) {
73                  $representative = sprintf('%s::%s()', \get_class($representative[0]), $representative[1]);
74              } elseif (\is_object($representative)) {
75                  $representative = \get_class($representative);
76              }
77   
78              throw new \RuntimeException(sprintf('Controller "%s" requires that you provide a value for the "$%s" argument. Either the argument is nullable and no null value has been provided, no default value has been provided or because there is a non optional argument after this one.', $representative, $metadata->getName()));
79          }
80   
81          return $arguments;
82      }
83   
84      public static function getDefaultArgumentValueResolvers()
85      {
86          return [
87              new RequestAttributeValueResolver(),
88              new RequestValueResolver(),
89              new SessionValueResolver(),
90              new DefaultValueResolver(),
91              new VariadicValueResolver(),
92          ];
93      }
94  }
95