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
Proyectos Symfony destacados
La forma más sencilla de generar el backend de tus aplicaciones Symfony. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.