Nuevo en Symfony 3.4: Mejorados los validadores de comparación

La idea original de los validadores de comparación era comparar variables respecto a algún valor predefinido (ejemplo: "el precio debe ser mayor que 0", "la edad debe ser igual o mayor que 18", etc.)

No obstante, en las aplicaciones Symfony es común tener que comparar el valor de dos variables entre sí (ejemplo: "la fecha de finalización es posterior a la de inicio", "la contraseña en claro no es igual que el login", etc.)

En esos casos puedes utilizar el validador Expression para definir una expresión que compare ambos valores, por ejemplo dos propiedades de un objeto:

use Symfony\Component\Validator\Constraints as Assert;
 
class Event
{
    /** @Assert\DateTime() */
    private $startDate;
 
    /**
     * @Assert\DateTime()
     * @Assert\Expression("value > this.startDate")
     */
    private $endDate;
 
    // ...
}

En Symfony 3.4, hemos mejorado los validadores de comparación para que acepten una nueva opción llamada propertyPath y que define la propiedad con cuyo valor quieres hacer la comparación:

use Symfony\Component\Validator\Constraints as Assert;
 
class Event
{
    /** @Assert\DateTime() */
    private $startDate;
 
    /**
     * @Assert\DateTime()
     * @Assert\GreaterThan(propertyPath="startDate")
     */
    private $endDate;
 
    // ...
}

El valor de propertyPath puede ser cualquier expresión válida para el componente PropertyAccess, así que puedes hacer referencia a propiedades de objetos embebidos, arrays, etc.

Esta funcionalidad fue contribuida por Maxime Steinhausser en el pull request #22576.

Fuente: New in Symfony 3.4: Improved comparison constraints

Comentarios

Publicada el

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