[READ-ONLY] Subtree split of the Symfony Validator Component https://github.com/symfony/symfony
PHP
Latest commit 44a2c4b @fabpot fabpot minor #17549 [Validator] Minor fixes for the PSR-6 adapter (dunglas) …
This PR was merged into the 3.1-dev branch.

Discussion
----------

[Validator] Minor fixes for the PSR-6 adapter

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | n/a
| License       | MIT
| Doc PR        | todo

Follows #17440. Take into account comments of @Tobion.

Commits
-------

aa60d5b [Validator] Minor fixes for the PSR-6 adapter
Failed to load latest commit information.
Constraints feature #16909 Allows access to payload in callback validator (conrad…
Context Remove calls to non-existing method
Exception fixes CS
Mapping minor #17549 [Validator] Minor fixes for the PSR-6 adapter (dunglas)
Resources/translations Merge branch '2.7' into 2.8
Tests minor #17549 [Validator] Minor fixes for the PSR-6 adapter (dunglas)
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 Merge branch '2.4'
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 [3.0] Remove more deprecated interfaces in Form and Validator
ValidatorBuilderInterface.php [Validator] fixed wrong php docs
composer.json [Validator] Add a PSR-6 adapter
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