![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/vendor/friendsofsymfony/rest-bundle/Request/ |
<?php /* * This file is part of the FOSRestBundle package. * * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace FOS\RestBundle\Request; use FOS\RestBundle\Controller\Annotations\ParamInterface; use FOS\RestBundle\Exception\InvalidParameterException; use FOS\RestBundle\Util\ResolverTrait; use FOS\RestBundle\Validator\Constraints\ResolvableConstraintInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintViolationList; use Symfony\Component\Validator\Validator\ValidatorInterface; use Symfony\Component\Validator\Exception\ValidatorException; use Symfony\Component\Validator\ConstraintViolation; /** * Helper to validate parameters of the active request. * * @author Alexander <[email protected]> * @author Lukas Kahwe Smith <[email protected]> * @author Jordi Boggiano <[email protected]> * @author Boris Guéry <[email protected]> */ final class ParamFetcher implements ParamFetcherInterface { use ResolverTrait; private $container; private $parameterBag; private $requestStack; private $validator; public function __construct(ContainerInterface $container, ParamReaderInterface $paramReader, RequestStack $requestStack, ValidatorInterface $validator) { $this->container = $container; $this->requestStack = $requestStack; $this->validator = $validator; $this->parameterBag = new ParameterBag($paramReader); } /** * {@inheritdoc} */ public function setController(callable $controller): void { $this->parameterBag->setController($this->getRequest(), $controller); } /** * Add additional params to the ParamFetcher during runtime. * * Note that adding a param that has the same name as an existing param will override that param. */ public function addParam(ParamInterface $param): void { $this->parameterBag->addParam($this->getRequest(), $param); } /** * @return ParamInterface[] */ public function getParams(): array { return $this->parameterBag->getParams($this->getRequest()); } /** * {@inheritdoc} */ public function get(string $name, ?bool $strict = null) { $params = $this->getParams(); if (!array_key_exists($name, $params)) { throw new \InvalidArgumentException(sprintf("No @ParamInterface configuration for parameter '%s'.", $name)); } /** @var ParamInterface $param */ $param = $params[$name]; $default = $param->getDefault(); $default = $this->resolveValue($this->container, $default); $strict = (null !== $strict ? $strict : $param->isStrict()); $paramValue = $param->getValue($this->getRequest(), $default); return $this->cleanParamWithRequirements($param, $paramValue, $strict, $default); } private function cleanParamWithRequirements(ParamInterface $param, $paramValue, bool $strict, $default) { $this->checkNotIncompatibleParams($param); if (null !== $default && $default === $paramValue) { return $paramValue; } $constraints = $param->getConstraints(); $this->resolveConstraints($constraints); if (empty($constraints)) { return $paramValue; } try { $errors = $this->validator->validate($paramValue, $constraints); } catch (ValidatorException $e) { $violation = new ConstraintViolation( $e->getMessage(), $e->getMessage(), [], $paramValue, '', null, null, $e->getCode() ); $errors = new ConstraintViolationList([$violation]); } if (0 < count($errors)) { if ($strict) { throw InvalidParameterException::withViolations($param, $errors); } return null === $default ? '' : $default; } return $paramValue; } /** * {@inheritdoc} */ public function all(?bool $strict = null): array { $configuredParams = $this->getParams(); $params = []; foreach ($configuredParams as $name => $param) { $params[$name] = $this->get($name, $strict); } return $params; } private function checkNotIncompatibleParams(ParamInterface $param): void { if (null === $param->getValue($this->getRequest(), null)) { return; } $params = $this->getParams(); foreach ($param->getIncompatibilities() as $incompatibleParamName) { if (!array_key_exists($incompatibleParamName, $params)) { throw new \InvalidArgumentException(sprintf("No @ParamInterface configuration for parameter '%s'.", $incompatibleParamName)); } $incompatibleParam = $params[$incompatibleParamName]; if (null !== $incompatibleParam->getValue($this->getRequest(), null)) { $exceptionMessage = sprintf( '"%s" param is incompatible with %s param.', $param->getName(), $incompatibleParam->getName() ); throw new BadRequestHttpException($exceptionMessage); } } } /** * @param Constraint[] $constraints */ private function resolveConstraints(array $constraints): void { foreach ($constraints as $constraint) { if ($constraint instanceof ResolvableConstraintInterface) { $constraint->resolve($this->container); } } } private function getRequest(): Request { $request = $this->requestStack->getCurrentRequest(); if (null === $request) { throw new \RuntimeException('There is no current request.'); } return $request; } }