diff --git a/core/lib/Drupal/Core/TypedData/Validation/ConstraintViolationBuilder.php b/core/lib/Drupal/Core/TypedData/Validation/ConstraintViolationBuilder.php index efe7192..0091066 100644 --- a/core/lib/Drupal/Core/TypedData/Validation/ConstraintViolationBuilder.php +++ b/core/lib/Drupal/Core/TypedData/Validation/ConstraintViolationBuilder.php @@ -16,46 +16,63 @@ class ConstraintViolationBuilder implements ConstraintViolationBuilderInterface { /** - * @var ConstraintViolationList + * The list of violations. + * + * @var \Symfony\Component\Validator\ConstraintViolationList */ protected $violations; /** + * The violation message. + * * @var string */ protected $message; /** + * The message parameters. + * * @var array */ protected $parameters; /** + * The root path. + * * @var mixed */ protected $root; /** + * The invalid value caused the violation. + * * @var mixed */ protected $invalidValue; /** + * The property path. + * * @var string */ protected $propertyPath; /** - * @var TranslatorInterface + * The translator. + * + * @var \Symfony\Component\Translation\TranslatorInterface */ protected $translator; /** + * The translation domain. + * * @var string|null */ protected $translationDomain; /** + * The number used * @var int|null */ protected $plural; diff --git a/core/lib/Drupal/Core/TypedData/Validation/ExecutionContext.php b/core/lib/Drupal/Core/TypedData/Validation/ExecutionContext.php index 066ed0a..020d205 100644 --- a/core/lib/Drupal/Core/TypedData/Validation/ExecutionContext.php +++ b/core/lib/Drupal/Core/TypedData/Validation/ExecutionContext.php @@ -23,7 +23,7 @@ class ExecutionContext implements ExecutionContextInterface { /** - * @var ValidatorInterface + * @var Symfony\Component\Validator\Validator\ValidatorInterface */ protected $validator; @@ -35,7 +35,7 @@ class ExecutionContext implements ExecutionContextInterface { protected $root; /** - * @var TranslatorInterface + * @var \Symfony\Component\Translation\TranslatorInterface */ protected $translator; @@ -47,7 +47,7 @@ class ExecutionContext implements ExecutionContextInterface { /** * The violations generated in the current context. * - * @var ConstraintViolationList + * @var \Symfony\Component\Validator\ConstraintViolationList */ protected $violations; @@ -75,7 +75,7 @@ class ExecutionContext implements ExecutionContextInterface { /** * The current validation metadata. * - * @var MetadataInterface|null + * @var \Symfony\Component\Validator\Mapping\MetadataInterface|null */ protected $metadata; @@ -89,7 +89,7 @@ class ExecutionContext implements ExecutionContextInterface { /** * The currently validated constraint. * - * @var Constraint|null + * @var \Symfony\Component\Validator\Constraint|null */ protected $constraint; @@ -112,8 +112,8 @@ class ExecutionContext implements ExecutionContextInterface { * * @param \Symfony\Component\Validator\Validator\ValidatorInterface $validator * The validator. - * @param mixed $root The root value of the - * validated object graph + * @param mixed $root + * The root value of the validated object graph * @param TranslatorInterface $translator The translator * @param string|null $translationDomain The translation domain to * use for translating diff --git a/core/lib/Drupal/Core/TypedData/Validation/RecursiveContextualValidator.php b/core/lib/Drupal/Core/TypedData/Validation/RecursiveContextualValidator.php index c42d152..60cb26d 100644 --- a/core/lib/Drupal/Core/TypedData/Validation/RecursiveContextualValidator.php +++ b/core/lib/Drupal/Core/TypedData/Validation/RecursiveContextualValidator.php @@ -9,12 +9,11 @@ use Drupal\Core\TypedData\ComplexDataInterface; use Drupal\Core\TypedData\ListInterface; -use Drupal\Core\TypedData\TraversableTypedDataInterface; use Drupal\Core\TypedData\TypedDataInterface; use Drupal\Core\TypedData\TypedDataManager; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidatorFactoryInterface; -use Symfony\Component\Validator\Context\ExecutionContextInterface;; +use Symfony\Component\Validator\Context\ExecutionContextInterface; use Symfony\Component\Validator\Mapping\Factory\MetadataFactoryInterface; use Symfony\Component\Validator\Validator\ContextualValidatorInterface; @@ -24,16 +23,22 @@ class RecursiveContextualValidator implements ContextualValidatorInterface { /** - * @var ExecutionContextInterface + * The execution context. + * + * @var \Symfony\Component\Validator\Context\ExecutionContextInterface */ protected $context; /** + * The metadata factory. + * * @var \Symfony\Component\Validator\Mapping\Factory\MetadataFactoryInterface */ protected $metadataFactory; /** + * The constraint validator factory. + * * @var \Symfony\Component\Validator\ConstraintValidatorFactoryInterface */ protected $constraintValidatorFactory; @@ -61,6 +66,7 @@ public function __construct(ExecutionContextInterface $context, MetadataFactoryI * {@inheritdoc} */ public function atPath($path) { + // @todo This value is not used at the moment. $this->defaultPropertyPath = $this->context->getPropertyPath($path); return $this; diff --git a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/ComplexDataConstraintValidator.php b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/ComplexDataConstraintValidator.php index 8398ae8..94a522e 100755 --- a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/ComplexDataConstraintValidator.php +++ b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/ComplexDataConstraintValidator.php @@ -38,6 +38,8 @@ public function validate($data, Constraint $constraint) { foreach ($constraint->properties as $name => $constraints) { $this->context->getValidator() ->inContext($this->context) + // Specifically pass along FALSE as $root_call, as we validate the data + // as part of the typed data tree. ->validate($data->get($name), $constraints, NULL, FALSE); } } diff --git a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NotNullConstraintValidator.php b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NotNullConstraintValidator.php index 8332ed1..85ae5f9 100644 --- a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NotNullConstraintValidator.php +++ b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NotNullConstraintValidator.php @@ -15,6 +15,8 @@ /** * NotNull constraint validator. + * + * Overrides the symfony validator to handle empty Typed Data structures. */ class NotNullConstraintValidator extends NotNullValidator { diff --git a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NullConstraintValidator.php b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NullConstraintValidator.php index a6af4e9..b584687 100644 --- a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NullConstraintValidator.php +++ b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NullConstraintValidator.php @@ -15,6 +15,8 @@ /** * Null constraint validator. + * + * Overrides the symfony validator to handle empty Typed Data structures. */ class NullConstraintValidator extends NullValidator { diff --git a/core/modules/user/src/Plugin/Validation/Constraint/UserMailRequired.php b/core/modules/user/src/Plugin/Validation/Constraint/UserMailRequired.php index 6e9fa3b..f463c3a 100644 --- a/core/modules/user/src/Plugin/Validation/Constraint/UserMailRequired.php +++ b/core/modules/user/src/Plugin/Validation/Constraint/UserMailRequired.php @@ -8,7 +8,6 @@ namespace Drupal\user\Plugin\Validation\Constraint; use Drupal\Component\Utility\SafeMarkup; -use Drupal\Core\TypedData\Validation\TypedDataAwareValidatorTrait; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidatorInterface; use Symfony\Component\Validator\ExecutionContextInterface; diff --git a/core/tests/Drupal/Tests/Core/TypedData/RecursiveContextualValidatorTest.php b/core/tests/Drupal/Tests/Core/TypedData/RecursiveContextualValidatorTest.php index c027e2c..0f11114 100644 --- a/core/tests/Drupal/Tests/Core/TypedData/RecursiveContextualValidatorTest.php +++ b/core/tests/Drupal/Tests/Core/TypedData/RecursiveContextualValidatorTest.php @@ -11,14 +11,11 @@ use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Core\TypedData\DataDefinition; use Drupal\Core\TypedData\MapDataDefinition; -use Drupal\Core\TypedData\TraversableTypedDataInterface; -use Drupal\Core\TypedData\TypedDataInterface; use Drupal\Core\TypedData\TypedDataManager; use Drupal\Core\TypedData\Validation\ExecutionContextFactory; use Drupal\Core\TypedData\Validation\RecursiveValidator; use Drupal\Core\Validation\ConstraintManager; use Drupal\Tests\UnitTestCase; -use Symfony\Component\Validator\Constraints\Callback; use Symfony\Component\Validator\ConstraintValidatorFactory; use Symfony\Component\Validator\Context\ExecutionContextInterface; use Symfony\Component\Validator\DefaultTranslator; @@ -32,21 +29,29 @@ class RecursiveContextualValidatorTest extends UnitTestCase { /** + * The type data manager. + * * @var \Drupal\Core\TypedData\TypedDataManager */ protected $typedDataManager; /** + * The recursive validator. + * * @var \Drupal\Core\TypedData\Validation\RecursiveValidator */ protected $recursiveValidator; /** - * @var \Symfony\Component\Validator\ConstraintValidatorFactoryInterface|\PHPUnit_Framework_MockObject_MockObject + * The validator factory. + * + * @var \Symfony\Component\Validator\ConstraintValidatorFactoryInterface */ protected $validatorFactory; /** + * The execution context factory. + * * @var \Drupal\Core\TypedData\Validation\ExecutionContextFactory */ protected $contextFactory; @@ -151,7 +156,6 @@ public function testBasicValidateWithMultipleConstraints() { /** * @covers ::validate - * @todo: Fix. */ public function testPropertiesValidateWithMultipleLevels() { diff --git a/core/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php b/core/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php index 6f82d6d..191decd 100644 --- a/core/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php +++ b/core/vendor/symfony/validator/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php @@ -92,7 +92,7 @@ public function atPath($path) /** * {@inheritdoc} */ - public function validate($data, $constraints = null, $groups = null) + public function validate($value, $constraints = null, $groups = null) { $groups = $groups ? $this->normalizeGroups($groups) : $this->defaultGroups; @@ -115,9 +115,9 @@ public function validate($data, $constraints = null, $groups = null) $metadata->addConstraints($constraints); $this->validateGenericNode( - $data, + $value, null, - is_object($data) ? spl_object_hash($data) : null, + is_object($value) ? spl_object_hash($value) : null, $metadata, $this->defaultPropertyPath, $groups, @@ -134,9 +134,9 @@ public function validate($data, $constraints = null, $groups = null) // If an object is passed without explicit constraints, validate that // object against the constraints defined for the object's class - if (is_object($data)) { + if (is_object($value)) { $this->validateObject( - $data, + $value, $this->defaultPropertyPath, $groups, TraversalStrategy::IMPLICIT, @@ -151,9 +151,9 @@ public function validate($data, $constraints = null, $groups = null) // If an array is passed without explicit constraints, validate each // object in the array - if (is_array($data)) { + if (is_array($value)) { $this->validateEachObjectIn( - $data, + $value, $this->defaultPropertyPath, $groups, true, @@ -169,7 +169,7 @@ public function validate($data, $constraints = null, $groups = null) throw new RuntimeException(sprintf( 'Cannot validate values of type "%s" automatically. Please '. 'provide a constraint.', - gettype($data) + gettype($value) )); }