Validating Objects With Symfony Validator Component
Saturday, February 1, 2020
By default the Symfony Validator component can only validate simple variables such as strings, numbers and arrays.
<?php
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Validation;
$validator = Validation::createValidator();
$violations = $validator->validate('Example', [
new Length(['min' => 10]),
new NotBlank(),
]);
To validate objects you need to use the ValidatorBuilder to build and return a Validator instance.
<?php
use Symfony\Component\Validator\Validation;
$builder = Validation::createValidatorBuilder();
$builder->addMethodMapping('loadValidatorMetadata');
$validator = $builder->getValidator();
Now add a static method loadValidatorMetadata
to your class with your constraints.
<?php
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Mapping\ClassMetadata;
class Book {
public $name;
public static function loadValidatorMetadata(ClassMetadata $metadata) {
$metadata->addPropertyConstraint('name', new NotBlank());
}
}
You can now validate that object.
<?php
use Symfony\Component\Validator\Validation;
$builder = Validation::createValidatorBuilder();
$builder->addMethodMapping('loadValidatorMetadata');
$validator = $builder->getValidator();
$book = new Book();
$violations = $validator->validate($book);