Skip to content


Subversion checkout URL

You can clone with
Download ZIP
[READ-ONLY] Subtree split of the Symfony Validator Component -- clone into Symfony/Component/ (master at symfony/symfony)

Merge branch '2.8'

* 2.8: (21 commits)
  Fix merge
  Fix typo
  Various fixes esp. on Windows
  Fix the validation of form resources to register the default theme
  Fix the retrieval of the value with property path when using a loader
  [appveyor] minor enhancements
  [Process] Disable failing tests on Windows
  [Translation] Fix the string casting in the XliffFileLoader
  Windows and Intl fixes
  Add appveyor.yml for C.I. on Windows
  [VarDumper] fixed HtmlDumper to target specific the head tag
  [travis] merge php: nightly and deps=high test-matrix lines
  consistently use str_replace to unify directory separators
  Support omitting the <target> node in an .xlf file.
  Fix the handling of values for multiple choice types
  moved PHP nightly to PHP 7.0
  fixed tests using deprecation features
  [Form] made deprecation notice more precise
  fixed CS
  Fix BC break after split of ACL from core

Failed to load latest commit information.
Constraints Merge branch '2.7' into 2.8
Context fixes CS
Exception fixes CS
Mapping fixes CS
Resources/translations fixed typo in translation keys
Tests Merge branch '2.8'
Util [Validator] Property paths starting with 0 are broken.
Validator fixes CS
Violation Merge branch '2.7' into 2.8
.gitignore Added missing files .gitignore [Validator] Deprecated PHP7-incompatible constraints and related vali…
ClassBasedInterface.php Normalized @deprecated annotations.
Constraint.php fixes CS
ConstraintValidator.php Silence invasive deprecation warnings, opt-in for warnings
ConstraintValidatorFactory.php Merge branch '2.4'
ConstraintValidatorFactoryInterface.php removed unneeded use statements
ConstraintValidatorInterface.php [Validator] Refactored the GraphWalker into an implementation of the …
ConstraintViolation.php Silence invasive deprecation warnings, opt-in for warnings
ConstraintViolationInterface.php [Validator] Added missing error codes and turned codes into UUIDs
ConstraintViolationList.php made {@inheritdoc} annotations consistent across the board
ConstraintViolationListInterface.php Docblock fixes
DefaultTranslator.php Silence invasive deprecation warnings, opt-in for warnings
ExecutionContext.php Silence invasive deprecation warnings, opt-in for warnings
ExecutionContextInterface.php fixed merge
GlobalExecutionContextInterface.php Normalized @deprecated annotations.
GroupSequenceProviderInterface.php fixed CS
LICENSE Updated copyright to 2015
MetadataFactoryInterface.php Normalized @deprecated annotations.
MetadataInterface.php Normalized @deprecated annotations.
ObjectInitializerInterface.php [Validator] Refactored the GraphWalker into an implementation of the …
PropertyMetadataContainerInterface.php Normalized @deprecated annotations.
PropertyMetadataInterface.php fixes CS Merge branch '2.8'
Validation.php fixes CS
ValidationVisitor.php Silence invasive deprecation warnings, opt-in for warnings
ValidationVisitorInterface.php [Validator] adds more deprecation notices.
Validator.php Silence invasive deprecation warnings, opt-in for warnings
ValidatorBuilder.php Silence invasive deprecation warnings, opt-in for warnings
ValidatorBuilderInterface.php fixes CS
ValidatorInterface.php Merge branch '2.6' into 2.7
composer.json Merge branch '2.8'
phpunit.xml.dist [2.3] require-dev PHPUnit bridge

Validator Component

This component is based on the JSR-303 Bean Validation specification and enables specifying validation rules for classes using XML, YAML, PHP or annotations, which can then be checked against instances of these classes.


The component provides "validation constraints", which are simple objects containing the rules for the validation. Let's validate a simple string as an example:

use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints\Length;

$validator = Validation::createValidator();

$violations = $validator->validateValue('Bernhard', new Length(array('min' => 10)));

This validation will fail because the given string is shorter than ten characters. The precise errors, here called "constraint violations", are returned by the validator. You can analyze these or return them to the user. If the violation list is empty, validation succeeded.

Validation of arrays is possible using the Collection constraint:

use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints as Assert;

$validator = Validation::createValidator();

$constraint = new Assert\Collection(array(
    'name' => new Assert\Collection(array(
        'first_name' => new Assert\Length(array('min' => 101)),
        'last_name' => new Assert\Length(array('min' => 1)),
    'email' => new Assert\Email(),
    'simple' => new Assert\Length(array('min' => 102)),
    'gender' => new Assert\Choice(array(3, 4)),
    'file' => new Assert\File(),
    'password' => new Assert\Length(array('min' => 60)),

$violations = $validator->validateValue($input, $constraint);

Again, the validator returns the list of violations.

Validation of objects is possible using "constraint mapping". With such a mapping you can put constraints onto properties and objects of classes. Whenever an object of this class is validated, its properties and method results are matched against the constraints.

use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints as Assert;

class User
     * @Assert\Length(min = 3)
     * @Assert\NotBlank
    private $name;

     * @Assert\Email
     * @Assert\NotBlank
    private $email;

    public function __construct($name, $email)
        $this->name = $name;
        $this->email = $email;

     * @Assert\IsTrue(message = "The user should have a Google Mail account")
    public function isGmailUser()
        return false !== strpos($this->email, '');

$validator = Validation::createValidatorBuilder()

$user = new User('John Doe', '');

$violations = $validator->validate($user);

This example uses the annotation support of Doctrine Common to map constraints to properties and methods. You can also map constraints using XML, YAML or plain PHP, if you dislike annotations or don't want to include Doctrine. Check the documentation for more information about these drivers.


Silex integration:


JSR-303 Specification:

You can run the unit tests with the following command:

$ cd path/to/Symfony/Component/Validator/
$ composer install
$ phpunit
Something went wrong with that request. Please try again.