respect-validation/docs/validators/PropertyOptional.md
Alexandre Gomes Gaigalas d9cdc118b2 Introduce REUSE compliance
This commit introduces REUSE compliance by annotating all files
with SPDX information and placing the reused licences in the
LICENSES folder.

We additionally removed the docheader tool which is made obsolete
by this change.

The main LICENSE and copyright text of the project is now not under
my personal name anymore, and it belongs to "The Respect Project
Contributors" instead.

This change restores author names to several files, giving the
appropriate attribution for contributions.
2026-01-21 06:28:11 +00:00

2.5 KiB

PropertyOptional

  • PropertyOptional(string $propertyName, Validator $validator)

Validates an object property against a given validator only if the property exists.

$object = new stdClass;
$object->name = 'The Respect Panda';
$object->email = 'therespectpanda@gmail.com';

v::propertyOptional('name', v::notBlank())->assert($object);
// Validation passes successfully

v::propertyOptional('email', v::email())->assert($object);
// Validation passes successfully

v::propertyOptional('age', v::intVal())->assert($object);
// Validation passes successfully

v::propertyOptional('website', v::url())->assert($object);
// Validation passes successfully

v::propertyOptional('name', v::lowercase())->assert($object);
// → `.name` must contain only lowercase letters

The name of this validator is automatically set to the property name.

v::propertyOptional('email', v::endsWith('@example.com'))->assert($object);
// → `.email` must end with "@example.com"

Note

This validator 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())->assert('Not an object');
// Validation passes successfully

v::objectType()->propertyOptional('name', v::notBlank())->assert('Not an object');
// → "Not an object" must be an object
  • To only validate if a property exists, use PropertyExists instead.
  • To validate a property against a given validator 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: