Usually you will be validating entire objects. But sometimes, you want to validate a simple value - like to verify that a string is a valid email address. From inside a controller, it looks like this:
// ... use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Validator\ValidatorInterface; // ... public function addEmail(string $email, ValidatorInterface $validator): void { $emailConstraint = new Assert\Email(); // all constraint "options" can be set this way $emailConstraint->message = 'Invalid email address'; // use the validator to validate the value $errors = $validator->validate( $email, $emailConstraint ); if (!$errors->count()) { // ... this IS a valid email address, do something } else { // this is *not* a valid email address $errorMessage = $errors[0]->getMessage(); // ... do something with the error } // ... }
By calling validate()
on the validator, you can pass in a raw value and
the constraint object that you want to validate that value against. A full
list of the available constraints - as well as the full class name for each
constraint - is available in the :doc:`constraints reference </reference/constraints>`
section.
Validation of arrays is possible using the Collection
constraint:
use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Validation; $validator = Validation::createValidator(); $input = [ 'name' => [ 'first_name' => 'Fabien', 'last_name' => 'Potencier', ], 'email' => 'test@email.tld', 'simple' => 'hello', 'eye_color' => 3, 'file' => null, 'password' => 'test', 'tags' => [ [ 'slug' => 'symfony_doc', 'label' => 'symfony doc', ], ], ]; $groups = new Assert\GroupSequence(['Default', 'custom']); $constraint = new Assert\Collection([ // the keys correspond to the keys in the input array 'name' => new Assert\Collection([ 'first_name' => new Assert\Length(['min' => 101]), 'last_name' => new Assert\Length(['min' => 1]), ]), 'email' => new Assert\Email(), 'simple' => new Assert\Length(['min' => 102]), 'eye_color' => new Assert\Choice([3, 4]), 'file' => new Assert\File(), 'password' => new Assert\Length(['min' => 60]), 'tags' => new Assert\Optional([ new Assert\Type('array'), new Assert\Count(['min' => 1]), new Assert\All([ new Assert\Collection([ 'slug' => [ new Assert\NotBlank(), new Assert\Type(['type' => 'string']), ], 'label' => [ new Assert\NotBlank(), ], ]), new CustomUniqueTagValidator(['groups' => 'custom']), ]), ]), ]); $violations = $validator->validate($input, $constraint, $groups);
The validate()
method returns a :class:`Symfony\\Component\\Validator\\ConstraintViolationList`
object, which acts like an array of errors. Each error in the collection
is a :class:`Symfony\\Component\\Validator\\ConstraintViolation` object,
which holds the error message on its getMessage()
method.
Note
When using groups with the
:doc:`Collection </reference/constraints/Collection>` constraint, be sure to
use the Optional
constraint when appropriate as explained in its
reference documentation.