KeyValue
keyValue(string $comparedKey, string $ruleName, string $baseKey)
Performs validation of $comparedKey
using the rule named on $ruleName
with
$baseKey
as base.
Sometimes, when validating arrays, the validation of a key value depends on another key value and that may cause some ugly code since you need the input before the validation, making some checking manually:
v::key('password', v::notEmpty())->validate($_POST);
v::key('password_confirmation', v::equals($_POST['password'] ?? null))->validate($_POST);
The problem with the above code is because you do not know if password
is a
valid key, so you must check it manually before performing the validation on
password_confirmation
.
The keyValue()
rule makes this job easier by creating a rule named on
$ruleName
passing $baseKey
as the first argument of this rule, see an example:
v::keyValue('password_confirmation', 'equals', 'password')->validate($_POST);
The above code will result on true
if $_POST['password_confirmation']
is
equals to $_POST['password']
, it's the same of:
See another example:
v::keyValue('state', 'subdivisionCode', 'country')->validate($_POST);
The above code will result on true
if $_POST['state']
is a
subdivision code of $_POST['country']
:
This rule will invalidate the input if $comparedKey
or $baseKey
don't exist,
or if the rule named on $ruleName
could not be created (or don't exist).
When using assert()
or check()
methods and the rule do not pass, it overwrites
all values in the validation exceptions with $baseKey
and $comparedKey
.
try {
v::keyValue('password_confirmation', 'equals', 'password')->check($_POST);
} catch (ValidationException $exception) {
// ..
}
The above code may generate the message:
password_confirmation must equal "password"
Categorization
- Arrays
- Nesting
Changelog
Version | Description |
---|---|
1.0.0 | Created |
See also: