Nuevo en Symfony 3.4: Soporte para grupos en el validador "Valid"

El validador Valid se emplea para validar los objetos que están embebidos como propiedades de otros objetos. De esta manera puedes validar fácilmente un objeto y todos los sub-objetos relacionados. Como en el siguiente ejemplo, que valida el objeto Address incluido dentro del objeto Author:

// src/AppBundle/Entity/Address.php
namespace AppBundle\Entity;
 
use Symfony\Component\Validator\Constraints as Assert;
 
class Address
{
    /** @Assert\NotBlank() */
    protected $street;
 
    /** @Assert\Length(max = 5) */
    protected $zipCode;
}
 
// src/AppBundle/Entity/Author.php
namespace AppBundle\Entity;
 
use Symfony\Component\Validator\Constraints as Assert;
 
class Author
{
    /** @Assert\NotBlank */
    protected $firstName;
 
    /** @Assert\NotBlank */
    protected $lastName;
 
    /** @Assert\Valid */
    protected $address;
}

El único inconveniente de este validador es que no soporta los grupos de validación. En Symfony 3.4 hemos mejorado este validador para que sí soporte los grupos:

// src/AppBundle/Entity/Address.php
// ...
class Address
{
    /** @Assert\NotBlank(groups={"basic"}) */
    protected $street;
 
    /** @Assert\Length(max = 5) */
    protected $zipCode;
}
 
// src/AppBundle/Entity/Author.php
// ...
class Author
{
    /** @Assert\NotBlank */
    protected $firstName;
 
    /** @Assert\NotBlank */
    protected $lastName;
 
    /** @Assert\Valid(groups={"basic"}) */
    protected $address;
}

En este ejemplo, el validador Valid solamente comprueba las propiedades que pertenezcan al grupo basic del objeto Address, así que solo validará la propiedad street y no la propiedad zipCode.

Esta mejora ha sido contribuida por Christian Flothmann en el pull request #21111.

Fuente: New in Symfony 3.4: Groups support for the Valid constraint

Comentarios

Publicada el

18 de septiembre de 2017

Etiquetas

Proyectos Symfony destacados

La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.