diff --git a/src/Symfony/Component/Validator/CHANGELOG.md b/src/Symfony/Component/Validator/CHANGELOG.md index 73c4f27715ef..c2c41d6daa4a 100644 --- a/src/Symfony/Component/Validator/CHANGELOG.md +++ b/src/Symfony/Component/Validator/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +7.1 +--- + + * Add `list` and `associative_array` types to `Type` constraint + 7.0 --- diff --git a/src/Symfony/Component/Validator/Constraints/TypeValidator.php b/src/Symfony/Component/Validator/Constraints/TypeValidator.php index 026db36ebc91..94c0c8639d46 100644 --- a/src/Symfony/Component/Validator/Constraints/TypeValidator.php +++ b/src/Symfony/Component/Validator/Constraints/TypeValidator.php @@ -36,6 +36,8 @@ class TypeValidator extends ConstraintValidator 'string' => 'is_string', 'scalar' => 'is_scalar', 'array' => 'is_array', + 'list' => 'is_array && array_is_list', + 'associative_array' => 'is_array && !array_is_list', 'iterable' => 'is_iterable', 'countable' => 'is_countable', 'callable' => 'is_callable', @@ -73,6 +75,8 @@ public function validate(mixed $value, Constraint $constraint): void 'finite-float' => \is_float($value) && is_finite($value), 'finite-number' => \is_int($value) || \is_float($value) && is_finite($value), 'number' => \is_int($value) || \is_float($value) && !is_nan($value), + 'list' => \is_array($value) && array_is_list($value), + 'associative_array' => \is_array($value) && !array_is_list($value), default => self::VALIDATION_FUNCTIONS[$type]($value), }) { return; diff --git a/src/Symfony/Component/Validator/Tests/Constraints/TypeValidatorTest.php b/src/Symfony/Component/Validator/Tests/Constraints/TypeValidatorTest.php index 8b4fe25314b1..99714407fad1 100644 --- a/src/Symfony/Component/Validator/Tests/Constraints/TypeValidatorTest.php +++ b/src/Symfony/Component/Validator/Tests/Constraints/TypeValidatorTest.php @@ -97,6 +97,10 @@ public static function getValidValues() [1.5, 'finite-number'], ['12345', 'string'], [[], 'array'], + [[], 'list'], + [[1, 2, 3], 'list'], + [['abc' => 1], 'associative_array'], + [[1 => 1], 'associative_array'], [$object, 'object'], [$object, 'stdClass'], [$file, 'resource'], @@ -166,6 +170,12 @@ public static function getInvalidValues() [$file, 'float', 'resource'], [$file, 'string', 'resource'], [$file, 'object', 'resource'], + [[1 => 1], 'list', 'array'], + [['abc' => 1], 'list', 'array'], + ['abcd1', 'list', '"abcd1"'], + [[], 'associative_array', 'array'], + [[1, 2, 3], 'associative_array', 'array'], + ['abcd1', 'associative_array', '"abcd1"'], ['12a34', 'digit', '"12a34"'], ['1a#23', 'alnum', '"1a#23"'], ['abcd1', 'alpha', '"abcd1"'],