Skip to content
[READ-ONLY] Subtree split of the Symfony Validator Component
PHP
Latest commit 0e75903 @nicolas-grekas nicolas-grekas Merge branch '3.0'
* 3.0:
  [VarDumper] Fix tests on PHP 7
  [DomCrawler] Clarify the value returned by getPhpFiles()
  [DependencyInjection] Fix #16461 Let Container::set() replace existing aliases
  avoid (string) catchable fatal error for instances of __PHP_Incomplete_Class
  remove unnecessary retrieval and setting of data
  Update validators.fr.xlf
  avoid (string) catchable fatal error for __PHP_Incomplete_Class instances
  sendContent return as parent.
  [DomCrawler] Remove the overridden getHash() method to prevent problems when cloning the crawler
  [FrameworkBundle] Fix a typo
  Added more exceptions to singularify method
  Add width attribute on SVG
  [FrameworkBundle] Support autowiring for TranslationInterface
  [Validator] remove obsolete context and PropertyAccess code
  [WebProfiler] Fixed styles for search block and menu profiler for IE Edge
Failed to load latest commit information.
Constraints Merge branch '3.0'
Context Remove calls to non-existing method
Exception fixes CS
Mapping minor #17549 [Validator] Minor fixes for the PSR-6 adapter (dunglas)
Resources/translations Update validators.fr.xlf
Tests Merge branch '3.0'
Util [Validator] Property paths starting with 0 are broken.
Validator Remove unused imports
Violation [Validator] removed deprecated methods
.gitignore Added missing files .gitignore
CHANGELOG.md [Validator] added BIC (SWIFT-BIC) validation constraint
Constraint.php Merge branch '2.3' into 2.7
ConstraintValidator.php [Validator] removed deprecated methods
ConstraintValidatorFactory.php [Validator] remove obsolete context and PropertyAccess code
ConstraintValidatorFactoryInterface.php removed unneeded use statements
ConstraintValidatorInterface.php [Validator] removed deprecated methods
ConstraintViolation.php [Validator] removed deprecated methods
ConstraintViolationInterface.php [Validator] removed deprecated methods
ConstraintViolationList.php made {@inheritdoc} annotations consistent across the board
ConstraintViolationListInterface.php remove api tags from code
GroupSequenceProviderInterface.php fixed CS
LICENSE Update copyright year
ObjectInitializerInterface.php remove api tags from code
README.md Merge branch '3.0'
Validation.php [Validator] fixed wrong php docs
ValidatorBuilder.php [Validator] remove obsolete context and PropertyAccess code
ValidatorBuilderInterface.php [Validator] fixed wrong php docs
composer.json Merge branch '3.0'
phpunit.xml.dist Add missing exclusions from phpunit.xml.dist

README.md

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.

Usage

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->validate('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->validate($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, '@gmail.com');
    }
}

$validator = Validation::createValidatorBuilder()
    ->enableAnnotationMapping()
    ->getValidator();

$user = new User('John Doe', 'john@example.com');

$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.

Resources

Silex integration:

https://github.com/silexphp/Silex/blob/master/src/Silex/Provider/ValidatorServiceProvider.php

Documentation:

https://symfony.com/doc/3.1/book/validation.html

JSR-303 Specification:

http://jcp.org/en/jsr/detail?id=303

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.