vendor/shopware/core/Framework/Validation/DataValidator.php line 52

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Framework\Validation;
  3. use Shopware\Core\Framework\Validation\Exception\ConstraintViolationException;
  4. use Symfony\Component\Validator\ConstraintViolation;
  5. use Symfony\Component\Validator\ConstraintViolationList;
  6. use Symfony\Component\Validator\Validator\ValidatorInterface;
  7. class DataValidator
  8. {
  9.     /**
  10.      * @var ValidatorInterface
  11.      */
  12.     private $validator;
  13.     /**
  14.      * @internal
  15.      */
  16.     public function __construct(ValidatorInterface $validator)
  17.     {
  18.         $this->validator $validator;
  19.     }
  20.     public function getViolations(array $dataDataValidationDefinition $definitionstring $path ''): ConstraintViolationList
  21.     {
  22.         $violations = new ConstraintViolationList();
  23.         $violations->addAll($this->validateProperties($data$definition$path));
  24.         $violations->addAll($this->validateSubDefinitions($data$definition$path));
  25.         $violations->addAll($this->validateListDefinitions($data$definition$path));
  26.         return $violations;
  27.     }
  28.     public function validate(array $dataDataValidationDefinition $definitionstring $path ''): void
  29.     {
  30.         $violations $this->getViolations($data$definition$path);
  31.         if ($violations->count() === 0) {
  32.             return;
  33.         }
  34.         throw new ConstraintViolationException($violations$data);
  35.     }
  36.     private function validateProperties(array $dataDataValidationDefinition $definitionstring $path): ConstraintViolationList
  37.     {
  38.         $constraintViolations = new ConstraintViolationList();
  39.         foreach ($definition->getProperties() as $propertyName => $constraints) {
  40.             $value $data[$propertyName] ?? null;
  41.             $violations $this->validator->validate($value$constraints);
  42.             /** @var ConstraintViolation $violation */
  43.             foreach ($violations as $violation) {
  44.                 $constraintViolations->add(
  45.                     new ConstraintViolation(
  46.                         $violation->getMessage(),
  47.                         $violation->getMessageTemplate(),
  48.                         $violation->getParameters(),
  49.                         $violation->getRoot(),
  50.                         $path '/' $propertyName,
  51.                         $violation->getInvalidValue(),
  52.                         $violation->getPlural(),
  53.                         $violation->getCode(),
  54.                         $violation->getConstraint(),
  55.                         $violation->getCause()
  56.                     )
  57.                 );
  58.             }
  59.         }
  60.         return $constraintViolations;
  61.     }
  62.     private function validateSubDefinitions(array $dataDataValidationDefinition $definitionstring $path): ConstraintViolationList
  63.     {
  64.         $constraintViolations = new ConstraintViolationList();
  65.         foreach ($definition->getSubDefinitions() as $propertyName => $subDefinition) {
  66.             $value $data[$propertyName] ?? [];
  67.             $constraintViolations->addAll(
  68.                 $this->getViolations($value$subDefinition$path '/' $propertyName)
  69.             );
  70.         }
  71.         return $constraintViolations;
  72.     }
  73.     private function validateListDefinitions(array $dataDataValidationDefinition $definitionstring $path): ConstraintViolationList
  74.     {
  75.         $constraintViolations = new ConstraintViolationList();
  76.         foreach ($definition->getListDefinitions() as $propertyName => $subDefinition) {
  77.             $values $data[$propertyName] ?? [];
  78.             $i 0;
  79.             foreach ($values as $item) {
  80.                 $constraintViolations->addAll(
  81.                     $this->getViolations($item$subDefinition$path '/' $propertyName '/' $i)
  82.                 );
  83.                 ++$i;
  84.             }
  85.         }
  86.         return $constraintViolations;
  87.     }
  88. }