vendor/friendsofsymfony/rest-bundle/Request/ParameterBag.php line 79

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the FOSRestBundle package.
  4.  *
  5.  * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace FOS\RestBundle\Request;
  11. use Doctrine\Common\Util\ClassUtils;
  12. use FOS\RestBundle\Controller\Annotations\ParamInterface;
  13. use Symfony\Component\HttpFoundation\Request;
  14. /**
  15.  * Contains the {@link ParamFetcher} params and links them to a request.
  16.  *
  17.  * @internal
  18.  */
  19. final class ParameterBag
  20. {
  21.     private $paramReader;
  22.     private $params = [];
  23.     public function __construct(ParamReaderInterface $paramReader)
  24.     {
  25.         $this->paramReader $paramReader;
  26.     }
  27.     public function getParams(Request $request): array
  28.     {
  29.         $requestId spl_object_hash($request);
  30.         if (!isset($this->params[$requestId]) || empty($this->params[$requestId]['controller'])) {
  31.             throw new \InvalidArgumentException('Controller and method needs to be set via setController.');
  32.         }
  33.         if (null === $this->params[$requestId]['params']) {
  34.             return $this->initParams($requestId);
  35.         }
  36.         return $this->params[$requestId]['params'];
  37.     }
  38.     public function addParam(Request $requestParamInterface $param): void
  39.     {
  40.         $requestId spl_object_hash($request);
  41.         $this->getParams($request);
  42.         $this->params[$requestId]['params'][$param->getName()] = $param;
  43.     }
  44.     public function setController(Request $request, callable $controller): void
  45.     {
  46.         $requestId spl_object_hash($request);
  47.         $this->params[$requestId] = [
  48.             'controller' => $controller,
  49.             'params' => null,
  50.         ];
  51.     }
  52.     /**
  53.      * @return ParamInterface[]
  54.      */
  55.     private function initParams(string $requestId): array
  56.     {
  57.         $controller $this->params[$requestId]['controller'];
  58.         if (!is_array($controller) || empty($controller[0]) || !is_object($controller[0])) {
  59.             throw new \InvalidArgumentException('Controller needs to be set as a class instance (closures/functions are not supported)');
  60.         }
  61.         $class class_exists(ClassUtils::class)
  62.             ? ClassUtils::getClass($controller[0])
  63.             : get_class($controller[0]);
  64.         return $this->params[$requestId]['params'] = $this->paramReader->read(
  65.             new \ReflectionClass($class),
  66.             $controller[1]
  67.         );
  68.     }
  69. }