sonarrradarrplexorganizrnginxdashboardhtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelanding
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							94 lines
						
					
					
						
							3.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							94 lines
						
					
					
						
							3.5 KiB
						
					
					
				| <?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 = array()) | |
|     { | |
|         $this->argumentMetadataFactory = $argumentMetadataFactory ?: new ArgumentMetadataFactory(); | |
|         $this->argumentValueResolvers = $argumentValueResolvers ?: self::getDefaultArgumentValueResolvers(); | |
|     } | |
| 
 | |
|     /** | |
|      * {@inheritdoc} | |
|      */ | |
|     public function getArguments(Request $request, $controller) | |
|     { | |
|         $arguments = array(); | |
| 
 | |
|         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 array( | |
|             new RequestAttributeValueResolver(), | |
|             new RequestValueResolver(), | |
|             new SessionValueResolver(), | |
|             new DefaultValueResolver(), | |
|             new VariadicValueResolver(), | |
|         ); | |
|     } | |
| }
 | |
| 
 |