Seditio Source
Root |
./othercms/phpBB3/vendor/symfony/http-kernel/Controller/ArgumentResolver.php
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\HttpKernel\Controller;

use
Symfony\Component\HttpFoundation\Request;
use
Symfony\Component\HttpKernel\Controller\ArgumentResolver\DefaultValueResolver;
use
Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestAttributeValueResolver;
use
Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestValueResolver;
use
Symfony\Component\HttpKernel\Controller\ArgumentResolver\SessionValueResolver;
use
Symfony\Component\HttpKernel\Controller\ArgumentResolver\VariadicValueResolver;
use
Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadataFactory;
use
Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadataFactoryInterface;

/**
 * Responsible for resolving the arguments passed to an action.
 *
 * @author Iltar van der Berg <kjarli@gmail.com>
 */
final class ArgumentResolver implements ArgumentResolverInterface
{
    private
$argumentMetadataFactory;

   
/**
     * @var iterable|ArgumentValueResolverInterface[]
     */
   
private $argumentValueResolvers;

    public function
__construct(ArgumentMetadataFactoryInterface $argumentMetadataFactory = null, $argumentValueResolvers = [])
    {
       
$this->argumentMetadataFactory = $argumentMetadataFactory ?: new ArgumentMetadataFactory();
       
$this->argumentValueResolvers = $argumentValueResolvers ?: self::getDefaultArgumentValueResolvers();
    }

   
/**
     * {@inheritdoc}
     */
   
public function getArguments(Request $request, $controller)
    {
       
$arguments = [];

        foreach (
$this->argumentMetadataFactory->createArgumentMetadata($controller) as $metadata) {
            foreach (
$this->argumentValueResolvers as $resolver) {
                if (!
$resolver->supports($request, $metadata)) {
                    continue;
                }

               
$resolved = $resolver->resolve($request, $metadata);

                if (!
$resolved instanceof \Generator) {
                    throw new \
InvalidArgumentException(sprintf('"%s::resolve()" must yield at least one value.', \get_class($resolver)));
                }

                foreach (
$resolved as $append) {
                   
$arguments[] = $append;
                }

               
// continue to the next controller argument
               
continue 2;
            }

           
$representative = $controller;

            if (\
is_array($representative)) {
               
$representative = sprintf('%s::%s()', \get_class($representative[0]), $representative[1]);
            } elseif (\
is_object($representative)) {
               
$representative = \get_class($representative);
            }

            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()));
        }

        return
$arguments;
    }

    public static function
getDefaultArgumentValueResolvers()
    {
        return [
            new
RequestAttributeValueResolver(),
            new
RequestValueResolver(),
            new
SessionValueResolver(),
            new
DefaultValueResolver(),
            new
VariadicValueResolver(),
        ];
    }
}