/**
  * @param FieldConfigModel $entity
  * @return array
  */
 protected function validateEntityFields(FieldConfigModel $entity)
 {
     $errors = [];
     $fieldProperties = $this->fieldTypeProvider->getFieldProperties($entity->getType());
     foreach ($fieldProperties as $scope => $properties) {
         $scopeData = $entity->toArray($scope);
         foreach ($properties as $code => $config) {
             if (!isset($scopeData[$code])) {
                 continue;
             }
             if ($scope === 'enum') {
                 foreach ($scopeData[$code] as $key => $enumFields) {
                     $result = $this->strategyHelper->validateEntity(EnumValue::createFromArray($enumFields));
                     if ($result) {
                         $errors[] = sprintf('%s.%s.%s: %s', $scope, $code, $key, implode(' ', $result));
                     }
                 }
             } elseif (isset($config['constraints'])) {
                 $result = $this->strategyHelper->validateEntity($scopeData[$code], $this->constraintFactory->parse($config['constraints']));
                 if ($result) {
                     $errors[] = sprintf('%s.%s: %s', $scope, $code, implode(' ', $result));
                 }
             }
         }
     }
     return $errors;
 }
 /**
  * {@inheritdoc}
  */
 public function configureOptions(OptionsResolver $resolver)
 {
     $resolver->setNormalizer('constraints', function (Options $options, $constraints) {
         $constraints = is_object($constraints) ? array($constraints) : (array) $constraints;
         $constraintObjects = array();
         foreach ($constraints as $constraint) {
             if (is_array($constraint)) {
                 foreach ($constraint as $name => $options) {
                     $constraintObjects[] = $this->constraintFactory->create($name, $options);
                 }
             } elseif (is_object($constraint)) {
                 $constraintObjects[] = $constraint;
             }
         }
         return $constraintObjects;
     });
 }
 /**
  * {@inheritdoc}
  */
 public function setDefaultOptions(OptionsResolverInterface $resolver)
 {
     $constraintsNormalizer = function (Options $options, $constraints) {
         $constraints = is_object($constraints) ? array($constraints) : (array) $constraints;
         $constraintObjects = array();
         foreach ($constraints as $constraint) {
             if (is_array($constraint)) {
                 foreach ($constraint as $name => $options) {
                     $constraintObjects[] = $this->constraintFactory->create($name, $options);
                 }
             } elseif (is_object($constraint)) {
                 $constraintObjects[] = $constraint;
             }
         }
         return $constraintObjects;
     };
     $resolver->setNormalizers(array('constraints' => $constraintsNormalizer));
 }
 /**
  * @param array $constraints
  * @return array|Constraint[]
  */
 protected function getFieldConstraints(array $constraints)
 {
     $constraintObjects = [];
     foreach ($constraints as $constraint) {
         foreach ($constraint as $name => $options) {
             $constraintObjects[] = $this->constraintFactory->create($name, $options);
         }
     }
     return $constraintObjects;
 }
 /**
  * {@inheritdoc}
  */
 public function setDefaultOptions(OptionsResolverInterface $resolver)
 {
     $resolver->setNormalizers(['constraints' => function (Options $options, $constraints) {
         return $this->constraintFactory->parse(is_object($constraints) ? [$constraints] : (array) $constraints);
     }]);
 }
 /**
  * @param array $constraints
  *
  * @dataProvider invalidConstraintsProvider
  * @expectedException \InvalidArgumentException
  */
 public function testParseWithInvalidArgument($constraints)
 {
     $factory = new ConstraintFactory();
     $factory->parse($constraints);
 }
 /**
  * @param string $expectedClass
  * @param string $name
  * @param mixed $options
  * @dataProvider createDataProvider
  */
 public function testCreate($expectedClass, $name, $options)
 {
     $factory = new ConstraintFactory();
     $this->assertInstanceOf($expectedClass, $factory->create($name, $options));
 }