Peticiones Ajax con Symfony 3
Peticiones Ajax con Symfony 3

Seguimos trabajando con formularios en Symfony 3, en esta ocasión vamos a ver cómo crear formularios con entidades relacionadas en Symfony 3, para este caso tendremos una entidad Post y una entidad Category entre las cuales existirá una relación de muchos a muchos.

Nosotros vamos a crear ambas entidades y un formulario para crear posts con un campo de selección que sea de tipo múltiple para asociar varias categorías existentes a un nuevo post, de esta forma, cuando creemos un nuevo post, también tendremos que asociar las categorías seleccionadas a éste.

Para hacer la validación del dropdown de categorías vamos a utilizar Assert\Count, de esta forma haremos que el desplegable siendo múltiple requiera al menos una categoría.

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

Formularios con entidades relacionadas en Symfony 3

Lo primero que debemos hacer para que nuestro ejemplo funcione obviamente es crear ambas entidades, así que vamos a crear primero la entidad Post con el siguiente código.


Y ahora la entidad Category.


Si tienes dudas con el código anterior te recomiendo revisar los tutoriales del blog sobre Doctrine.

Con las dos anteriores entidades podremos crear tres tablas, la tabla post, la tabla category y la tabla pivote posts_categories, que será donde guardemos las relaciones de ambas entidades.

Ahora que tenemos las entidades creadas vamos a pasar a crear el formulario de posts el cual tendrá un campo múltiple de selección que conseguiremos gracias a EntityType, para ello crea un archivo llamado PostType en tu bundle y añade el siguiente código.


La única novedad del anterior trozo de código es el campo de formulario categories, de esta forma podemos añadir un campo de selección multiple haciendo que sea visible el campo name de cada categoría.


Para utilizar nuestro formulario y poder guardar los datos en nuestra base de datos vamos primero a crear el método addAction en un controlador.


Aunque parezca mentira no necesitamos nada más, con ese poco código podremos procesar nuestro formulario y crear el post y asociar las categorías en la tabla posts_categories, ese trabajo ya lo hicimos en las entidades.

Finalmente solo nos queda pintar el formulario en la vista, y, aunque ya lo hemos visto muchas veces, aquí tienes el código.


Y eso es todo, aunque nosotros hayamos utilizado EntityType para procesar las categorías la verdad que Symfony nos ofrece muchas alternativas a la hora de trabajar con formularios, creo que hay tantas que es fácil perderse.

Recuerda compartir el post si te ha sido de ayuda.