Constraint Targets en Symfony

En Symfony podemos aplicar constraints (restricciones) en propiedades, métodos y clases para la validación de valores

Contenido modificable

Si ves errores o quieres modificar/añadir contenidos, puedes crear un pull request. Gracias

Los constraints pueden aplicarse a una propiedad (por ejemplo name), a un método getter public (por ejemplo getFullName) o a una clase (Author). El primero es el más común y fácil de usar, pero el segundo te permite especificar reglas de validación más complejas.

Propiedades

Validar las propiedades es la técnica de validación más simple. Symfony permite validar propiedades public, protected y private. Una validación sencilla puede ser la siguiente:

// src/AppBundle/Entity/Author.php

// ...
use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    /**
     * @Assert\NotBlank()
     * @Assert\Length(min=3)
     */
    private $firstName;
}

Getters

Los constraints también pueden aplicarse al valor de retorno de un método. Symfony permite añadir un constraint a cualquier método public cuyo nombre empiece por get, is o has (a veces se hace referencia a estos tres como "getters", aunque individualmente serían getters, issers o hassers).

Esta forma permite validar un objeto dinámicamente. Por ejemplo, queremos asegurarnos de que en un campo password no es igual al nombre del usuario (por razones de seguridad). Puedes hacer esto creando el método isPasswordLegal con el constraint isTrue:

// src/AppBundle/Entity/Author.php

// ...
use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    /**
     * @Assert\IsTrue(message = "El password no puede ser tu nombre")
     */
    public function isPasswordLegal()
    {
        return $this->firstName !== $this->password;
    }
}

Classes

Algunos constraints se aplican a clases enteras, como Callback, que es un constraint genérico que se aplica a la propia clase. Cuando se valida la clase, los métodos especificados por el constraint simplemente se ejecutan de forma que cada uno pueda proporcionar también su propia validación.