Peticiones Ajax con Symfony 3
Peticiones Ajax con Symfony 3

El desarrollo de formularios en Symfony puede ser muy complejo dependiendo de las necesidades, pero nos facilitan mucho las cosas todas las herramientas que Symfony pone a nuestra disposición a la hora de desarrollar formularios, clases, temas, validaciones sencillas a través de entidades y mucho más.

En este primer tutorial sobre formularios en Symfony vamos a crear una entidad Post, una clase que represente a dicha entidad para crear el formulario, realizaremos la validación del formulario a través de Doctrine y finalmente haremos uso del tema de bootstrap que viene por defecto con Symfony 3 para pintar el formulario con 5 líneas de código, no se puede pedir más.

Antes de seguir puede que te interese revisar alguno de los siguientes tutoriales del blog.

Crear una entidad en Symfony3

Para crear nuestra entidad con Doctrine en Symfony 3 simplemente abre tu terminal y ejecuta el siguiente comando.


El anterior comando habrá creado dos nuevos archivos, pero a nosotros sólo nos interesa la entidad Post, pero lo veremos más tarde, ahora vamos a crear la clase para nuestro formulario.

Clases para formularios en Symfony 3

Ahora vamos a crear una clase que represente a nuestra entidad Post, para ello crea el directorio form dentro de tu bundle y dentro un archivo llamado PostType.php con el siguiente código que pasamos a explicar.


Esta clase representa a un formulario de la entidad Post, pero vamos paso a paso para entender que hace cada método.

  • El método buildForm se encarga de crear el formulario a groso modo.
  • El método configureOptions es el encargado de hacerle saber a la clase de que entidad provienen los datos que representa el formulario, no siempre es requerido pero es una buena práctica.

Ahora que ya sabemos que hace cada método y podemos entender el funcionamiento de la clase FormType.php, vamos a utilizarla, para ello crea un controlador llamado PostController.php y su vista asociada (E.g form.html.twig) y añade el siguiente código, primero al controlador.


Simplemente creamos una instancia de la entidad Post, creamos el formulario haciendo uso del método createForm que nos provee Controller, primero le pasamos la clase que representa nuestro formulario y después la instancia del post.

Para comprobar si el formulario ha sido ejecutado necesitamos manejar el objeto request, para ello utilizamos el método handleRequest, así a continuación podemos saber si el formulario ha sido ejecutado o simplemente queremos mostrar la vista.

Una vez el formulario se procesa y la validación es válida simplemente obtenemos el EntityManaget de Doctrine, guardamos el post y redirigimos a la ruta post_list, así de sencillo.

Pero tenemos que hacer la validación del formulario, y de ese trabajo se encarga la entidad Post a través de anotaciones con Symfony\Component\Validator\Constraints, así que abre la entidad Post y reemplaza el código por el siguiente.


A través de las propiedades podemos establecer validaciones de forma sencilla.

Con @Assert\NotBlank especificamos que ese campo no puede estar vacío, y con la propiedad message establecemos el mensaje de error.

Con @Assert\Length podemos definir la logitud permitidos para ese campo, a través de las propiedades min y max podemos afinar nuestra validación.

Antes de seguir recuerda crear la tabla post con el siguiente comando.

Formulario con Bootstrap en Symfony 3

Finalmente sólo nos queda pintar el formulario, para ello vamos a utilizar el theme de bootstrap que tenemos disponible en Symfony 3, así que añade el siguiente código a la template que hayas definido.


Con ese sencillo código nuestro código será pintado y validado utilizando bootstrap 3 gracias a la siguiente línea.


Para abrir y cerrar el tag form utilizamos lo siguiente.


Con {‘novalidate’: ‘novalidate’} nos aseguramos que la validación con html 5 del navegador no será ejecutada sino que utilizaremos la nuestra.

Finalmente, y ahora sí, con las siguientes funciones pintamos los campos y hacemos que aparezcan los errores si existen.


Y eso es todo, esta es una pequeña introducción para entender cómo funcionan los formularios en Symfony 3, es cierto que se puede hacer de distintas formas, no es necesario crear una clase para crear un formulario, pero también es cierto que es la mejor práctica, por ello lo hemos hecho así.