Skip to content

Latest commit

 

History

History
58 lines (43 loc) · 2.72 KB

validacion.md

File metadata and controls

58 lines (43 loc) · 2.72 KB

Validación

Aunque la documentación oficial sobre validación de formularios proporciona una extensísima información, aquí resumiremos los puntos más importantes.

Constraints

El servicio de validación de symfony permite validar cualquier clase a la que se haya sometido a reglas. Estas reglas reciben el nombre de constraints.

Podemos añadir constraints utilizando anotaciones, archivos xml o archivos yml. Por mantener la coherencia con el resto del material utilizaremos el tercer formato. Implementar un par de constraints de ejemplo sobre la clase Author:

# src/My/RecipesBundle/Resources/config/validation.yml
My\RecipesBundle\Entity\Author:
    properties:
        name:
            - NotBlank: ~
        surname:
            - NotBlank: ~

Una vez establecidas las constraints, desde cualquier controlador o clase con acceso a la capa de servicios podemos utilizar el validador.

    $author = new Author('Iñaki', '');
    $validator = $this->get('validator');
    $errors = $validator->validate($author);

En el caso anterior estamos construyendo un objeto Author con el atributo surname vacío, por lo que $validator>validate($author) devolverá un array indicando el error encontrado. En caso contrario, devolverá un array vacío.

Cuando invocamos el método isValid() de un formulario, internamente se está utilizando el servicio de validación para validar la clase subyacente. Además, el componente de formularios es capaz de interpretar el valor de retorno y contextualizarlo en el campo del formulario que corresponda.

Los constraints pueden aplicarse a atributos del objeto y a métodos. Los métodos proporcionan mayor potencia en la validación al introducir nuestra propia lógica. Por ejemplo, para vincular un constraint a un método isValid() deberemos añadir una sección getters al archivo de validación.

# src/My/RecipesBundle/Resources/config/validation.yml
My\RecipesBundle\Entity\Author:
    getters:
        valid:
            - "True": { message: "No aceptamos recetas del autor" }
    # ...
// src/My/RecipesBundle/Entity/Author.php

class Author
{
    // ...
    public function isValid()
    {
        return $this->__toString() != 'Karlos Arguiñano';
    }
}

El servicio de validación proporciona una larga lista de constraints con distintos propósitos. Para mayor información consultad la documentación oficial. Si los constraints proporcionados no fuesen suficiente, el componente de validación permite definir constraints personalizados.