Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

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

Merge branch '2.4'

* 2.4:
  unified return null usages
  [Validator] added Japanese translation
  Textarea value should default to empty string instead of null.
  Fix doc blocks
  [Process] Fix #10681, process are failing on Windows Server 2003
  updated doc
  [Security] fix DBAL connection typehint
  [HttpFoundation] status 201 is allowed to have a body
  unified return null usages

Conflicts:
	src/Symfony/Component/DependencyInjection/ContainerBuilder.php
	src/Symfony/Component/DomCrawler/Crawler.php
	src/Symfony/Component/Security/Core/Authentication/Provider/PreAuthenticatedAuthenticationProvider.php
latest commit d64b72b78e
Fabien Potencier fabpot authored April 18, 2014
Octocat-spinner-32 Constraints Merge branch '2.4' April 18, 2014
Octocat-spinner-32 Context fixed types in phpdocs April 16, 2014
Octocat-spinner-32 Exception [Validator] Improved performance of *ContextualValidator::validate() March 30, 2014
Octocat-spinner-32 Mapping fixed types in phpdocs April 16, 2014
Octocat-spinner-32 Resources Merge branch '2.4' April 18, 2014
Octocat-spinner-32 Tests Merge branch '2.4' April 18, 2014
Octocat-spinner-32 Util [Validator] Added inline documentation for the PropertyPath utility c… March 30, 2014
Octocat-spinner-32 Validator made types consistent with those defined in Hack April 16, 2014
Octocat-spinner-32 Violation fixed types in phpdocs April 16, 2014
Octocat-spinner-32 .gitignore Added missing files .gitignore July 21, 2013
Octocat-spinner-32 CHANGELOG.md [Validator] Documented changes in the UPGRADE files March 30, 2014
Octocat-spinner-32 ClassBasedInterface.php [Validator] Added deprecation notes March 30, 2014
Octocat-spinner-32 Constraint.php Merge branch '2.4' April 18, 2014
Octocat-spinner-32 ConstraintValidator.php made {@inheritdoc} annotations consistent across the board April 16, 2014
Octocat-spinner-32 ConstraintValidatorFactory.php Merge branch '2.4' April 16, 2014
Octocat-spinner-32 ConstraintValidatorFactoryInterface.php removed unneeded use statements January 01, 2014
Octocat-spinner-32 ConstraintValidatorInterface.php [Validator] Refactored the GraphWalker into an implementation of the … November 24, 2012
Octocat-spinner-32 ConstraintViolation.php Merge branch '2.4' April 16, 2014
Octocat-spinner-32 ConstraintViolationInterface.php fixed types in phpdocs April 16, 2014
Octocat-spinner-32 ConstraintViolationList.php made {@inheritdoc} annotations consistent across the board April 16, 2014
Octocat-spinner-32 ConstraintViolationListInterface.php fixed types in phpdocs April 16, 2014
Octocat-spinner-32 DefaultTranslator.php Merge branch '2.4' April 16, 2014
Octocat-spinner-32 ExecutionContext.php Merge branch '2.4' April 18, 2014
Octocat-spinner-32 ExecutionContextInterface.php Merge branch '2.4' April 16, 2014
Octocat-spinner-32 GlobalExecutionContextInterface.php [Validator] Added deprecation notes March 30, 2014
Octocat-spinner-32 GroupSequenceProviderInterface.php fixed CS July 09, 2012
Octocat-spinner-32 LICENSE update year on licenses January 07, 2014
Octocat-spinner-32 MetadataFactoryInterface.php Merge branch '2.4' April 16, 2014
Octocat-spinner-32 MetadataInterface.php [Validator] Improved inline documentation of the metadata classes March 30, 2014
Octocat-spinner-32 ObjectInitializerInterface.php [Validator] Refactored the GraphWalker into an implementation of the … November 24, 2012
Octocat-spinner-32 PropertyMetadataContainerInterface.php Merge branch '2.4' April 16, 2014
Octocat-spinner-32 PropertyMetadataInterface.php [Validator] Added deprecation notes March 30, 2014
Octocat-spinner-32 README.md updated version to 2.5 November 24, 2013
Octocat-spinner-32 Validation.php [FrameworkBundle] Implemented configuration to select the desired Val… March 30, 2014
Octocat-spinner-32 ValidationVisitor.php [Validator] Optimized use statements March 30, 2014
Octocat-spinner-32 ValidationVisitorInterface.php Merge branch '2.4' April 16, 2014
Octocat-spinner-32 Validator.php made {@inheritdoc} annotations consistent across the board April 16, 2014
Octocat-spinner-32 ValidatorBuilder.php fixed types in phpdocs April 16, 2014
Octocat-spinner-32 ValidatorBuilderInterface.php made types consistent with those defined in Hack April 16, 2014
Octocat-spinner-32 ValidatorInterface.php Merge branch '2.4' April 16, 2014
Octocat-spinner-32 composer.json fixed typo in composer.json March 31, 2014
Octocat-spinner-32 phpunit.xml.dist made usage of Composer autoloader for subtree-split unit tests November 09, 2012
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->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\True(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/fabpot/Silex/blob/master/src/Silex/Provider/ValidatorServiceProvider.php

Documentation:

http://symfony.com/doc/2.5/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.phar install
$ phpunit
Something went wrong with that request. Please try again.