respect-validation/docs/validators/Each.md
Alexandre Gomes Gaigalas bcc60ec035 Allow empty values in iterables for All, Each, Max, Min
Now empty values are again allowed in FilteredArray-style
validators.

To solve the issue with negation, a Result attribute was
added to signal indeciseveness (when a result cannot be
reliably inverted). On such cases, we consider that result
to be valid.

For example, `v::not(v::min(v::equals(10)))` says "The
lowest value of the iterable input should not be equal 10".

If the input is empty, we cannot decide whether its minimum
is equal to 10 or not, so the validator essentially becomes
a null-op.

Users that want to ensure these validators have a valid
decidable target must use it in combination with `Length`
or other similar validators to achieve the same result.
2026-01-30 21:27:16 +00:00

2.8 KiB

Each

  • Each(Validator $validator)

Validates whether each value in the input is valid according to another validator.

$releaseDates = [
    'validation' => '2010-01-01',
    'template'   => '2011-01-01',
    'relational' => '2011-02-05',
];

v::each(v::dateTime())->assert($releaseDates);
// Validation passes successfully

This validator is similar to All, but while All displays a single message generic to all failed entries, Each will display a message for each failed entry instead.

v::each(v::startsWith('2010'))->assert($releaseDates);
// → - Each item in `["validation": "2010-01-01", "template": "2011-01-01", "relational": "2011-02-05"]` must be valid
// →   - `.template` must start with "2010"
// →   - `.relational` must start with "2010"

v::named('Release Dates', v::each(v::startsWith('2010')))->assert($releaseDates);
// → - Each item in Release Dates must be valid
// →   - `.template` must start with "2010"
// →   - `.relational` must start with "2010"

You can also validate array keys combining this validator with Call:

v::call('array_keys', v::each(v::stringType()))->assert($releaseDates);
// Validation passes successfully

Note

This validator will pass if the input is empty. Use Length with [GreaterThan][GreaterThan.md] to perform a stricter check:

v::each(v::equals(10))->assert([]);
// Validation passes successfully

v::length(v::greaterThan(0))->each(v::equals(10))->assert([]);
// → The length of `[]` must be greater than 0

Templates

Each::TEMPLATE_STANDARD

Mode Template
default Each item in {{subject}} must be valid
inverted Each item in {{subject}} must be invalid

Template placeholders

Placeholder Description
subject The validated input or the custom validator name (if specified).

Categorization

  • Arrays
  • Nesting
  • Transformations

Changelog

Version Description
3.0.0 Rejected stdClass, non-iterables
2.0.0 Remove support for key validation
0.3.9 Created

See Also