text: <?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\ArgumentResolver;
  
  use Symfony\Component\HttpFoundation\Request;
  use Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface;
  use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
  
  /**
   * Yields a variadic argument's values from the request attributes.
   *
   * @author Iltar van der Berg <kjarli@gmail.com>
   */
  final class VariadicValueResolver implements ArgumentValueResolverInterface
  {
      /**
       * {@inheritdoc}
       */
      public function supports(Request $request, ArgumentMetadata $argument)
      {
          return $argument->isVariadic() && $request->attributes->has($argument->getName());
      }
  
      /**
       * {@inheritdoc}
       */
      public function resolve(Request $request, ArgumentMetadata $argument)
      {
          $values = $request->attributes->get($argument->getName());
  
          if (!\is_array($values)) {
              throw new \InvalidArgumentException(sprintf('The action argument "...$%1$s" is required to be an array, the request attribute "%1$s" contains a type of "%2$s" instead.', $argument->getName(), \gettype($values)));
          }
  
          foreach ($values as $value) {
              yield $value;
          }
      }
  }
  