mirror of
https://github.com/Respect/Validation.git
synced 2026-03-17 15:50:03 +01:00
Since we have the ability to use `not` as a prefix, having rules that validate negative behaviour makes them a bit inflexible, verbose, and harder to understand. This commit will refactor the `NotEmpty`, and rename it to `Falsy`. It will no longer trim strings, because Blank does a much better job at it; it only simulates the behaviour of PHP’s native `empty()` function. Because `Falsy`, `Blank`, and `Undef` have similar behaviour, I created a page to demonstrate the difference and show when the user should use one or the other. Assisted-by: Cursor (claude-4.5-opus-high)
2.2 KiB
2.2 KiB
PropertyOptional
PropertyOptional(string $propertyName, Rule $rule)
Validates an object property against a given rule only if the property exists.
$object = new stdClass;
$object->name = 'The Respect Panda';
$object->email = 'therespectpanda@gmail.com';
v::propertyOptional('name', v::notBlank())->isValid($object); // true
v::propertyOptional('email', v::email())->isValid($object); // true
v::propertyOptional('age', v::intVal())->isValid($object); // true
v::propertyOptional('website', v::url())->isValid($object); // true
v::propertyOptional('name', v::lowercase())->isValid($object); // false
The name of this validator is automatically set to the property name.
v::propertyOptional('email', v::endsWith('@example.com'))->assert($object);
// message: email must end with "@example.com"
Note
This rule will validate public, private, protected, uninitialised, and static properties. However, it will pass for anything that is not an object because it will always pass when it doesn't find a property in the input. If you want to ensure the input is an object, use ObjectType with it.
v::propertyOptional('name', v::notBlank())->isValid('Not an object'); // true
v::objectType()->propertyOptional('name', v::notBlank())->isValid('Not an object'); // false
- To only validate if a property exists, use PropertyExists instead.
- To validate a property against a given rule requiring the property to exist, use Property instead.
Templates
Template placeholders
| Placeholder | Description |
|---|---|
subject |
The validated input or the custom validator name (if specified). |
Categorization
- Nesting
- Objects
- Structures
Changelog
| Version | Description |
|---|---|
| 3.0.0 | Created from Property |
See also: