Nuevo en Symfony 4.3: Validación automática

Antes de explicar esta nueva funcionalidad añadida en Symfony 4.3, observa la siguiente entidad sencilla de Doctrine:

use Doctrine\ORM\Mapping as ORM;
 
/** @ORM\Entity */
class SomeEntity
{
    // ...
 
    /** @ORM\Column(length=4) */
    public $pinCode;
}

Pregunta: ¿genera el siguiente código algún tipo de error de validación?

$entity = new SomeEntity();
$entity->pinCode = '1234567890';
$violationList = $validator->validate($entity);

La respuesta es ... no. Aunque puede resultar sorprendente, muchos programadores/as Symfony todavía no son conscientes de que la configuración de mapeo de Doctrine (en el ejemplo anterior: @ORM\Column(length=4)) realmente no valida nada. Esta configuración solo sirve como pista para que Doctrine genere el esquema de la base de datos.

En Symfony 4.3 hemos mejorado esta situación gracias a la validación automática. De hecho, en Symfony 4.3 el mismo ejemplo resulta en el siguiente error de validación:

$violationList = $validator->validate($entity);
 
var_dump((string) $violationList);
// Object(App\Entity\SomeEntity).columnLength:\n
//     This value is too long. It should have 4 characters or less.
//     (code d94b19cc-114f-4f44-9cc4-4138e80a87b9)\n

La validación automática se basa en generar reglas de validación en base a la configuración de Doctrine. Para evitar problemas, esta nueva funcionalidad está desactivada por defecto, pero está activada para los nuevos proyectos creados con Symfony.

En la práctica, la configuración @ORM\Column(length=4) del ejemplo anterior hace que Symfony añada automáticamente la validación @Assert\Length(max=4) a esa misma propiedad.

Más en detalle, estas son todas las validaciones automáticas que se realizan:

Configuración de Doctrine Validación automática añadida
nullable=false @Assert\NotNull
type=... @Assert\Type(...)
unique=true @UniqueEntity
length=... @Assert\Length(...)

La validación automática de nullable=false y type=... requiere tener instalado el componente PropertyInfo.

Además, como el componente Form y API Platform utilizan el componente Validator internamente, todos los formularios y APIs también se van a beneficiar de esta validación automática.

Por último, recuerda que aunque esta validación automática es muy cómoda, no es suficiente para la mayoría de aplicaciones. Así que tendrás que seguir añadiendo algunos de los validadores de Symfony.

Esta funcionalidad fue contribuida por Kévin Dunglas en el pull request #27735.

Fuente: New in Symfony 4.3: Automatic validation

Comentarios

Publicada el

17 de mayo de 2019

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.