Contenido del curso
Base de datos
Consultas a tablas
Sistema de inicio de sesión
Gestión de base de datos
Formulario de comentarios en Symfony
Resumen
Crear un formulario de comentarios en Symfony te permite que los usuarios interactúen con cada fragmento de código publicado en tu plataforma. Si estás construyendo una comunidad de programadores, este componente es el corazón de la participación: permite comentar, opinar y aportar sobre el código de otros.
Aquí vas a ver cómo conectar una vista parcial de Twig con un controlador dedicado, manejar el Request, persistir la entidad y redirigir al usuario al snippet correspondiente.
¿Cómo se incluye una vista parcial de comentarios en Twig?
La idea es separar la lógica del formulario en su propio archivo Twig para mantener limpia la plantilla principal del snippet. Por convención, las vistas parciales en Symfony empiezan con guion bajo, lo que indica que no se renderizan de forma directa, sino que se importan dentro de otras plantillas.
En la página item, justo antes de la iteración de comentarios, agregas la directiva include apuntando a comment/_new.html.twig. Si la vista no existe, Symfony lanza un error claro que te guía a crearla [01:00].
¿Qué hace el guion bajo en una vista de Twig? Indica que es una vista parcial. No se accede a ella mediante una ruta, sino que se incluye dentro de otra plantilla con
include.
¿Qué estructura mínima necesita el formulario?
La plantilla _new.html.twig se mantiene simple y condicional. Solo si el usuario está logueado se renderiza el formulario, que envía datos por método POST a la acción del controlador.
Los elementos esenciales del formulario son:
- Una etiqueta
labelpara describir el campo. - Un
textareadonde el usuario escribe el comentario. - Un botón de envío con la acción Publicar.
¿Cómo crear el CommentController para procesar el formulario?
El controlador se genera con el comando bin/console make:controller y se nombra CommentController, siguiendo la convención de Symfony [02:30]. Dentro defines una ruta llamada new-comment que recibirá el ID del snippet comentado.
El método del controlador necesita inyectar varias dependencias clave para funcionar correctamente.
¿Qué dependencias necesita inyectar el controlador?
Para construir esta acción, importas en orden las piezas que harán el trabajo pesado:
- El usuario actual logueado, obtenido desde la entidad
User. - El EntityManager, que se encarga de persistir el nuevo registro en la base de datos.
- El Snippet al que pertenece el comentario, recibido como parámetro de la ruta.
- La clase Request, que da acceso al contenido enviado desde el formulario.
Con estas cuatro piezas tienes todo lo necesario: sabes quién comenta, dónde guardar, qué fragmento recibe el comentario y qué texto se envió.
¿Para qué sirve la clase Request en Symfony? Permite leer datos enviados por el navegador, como campos de formulario. Con
request->get('content')accedes directamente al texto que el usuario escribió.
¿Cómo persistir el comentario y redirigir al snippet?
Una vez tienes el contenido, instancias un nuevo objeto Comment y le asignas tres datos con sus respectivos setters: el autor (el usuario logueado), el snippet al que pertenece y el contenido del textarea [05:30].
El flujo de guardado funciona así:
- Validas con una condición que la variable de contenido no esté vacía.
- Llamas a
persist()para poner el comentario en cola. - Ejecutas
flush()para escribir realmente en la base de datos. - Rediriges al usuario al snippet original usando su
slug.
La redirección usa el nombre de ruta del item junto con getSlug() del snippet, lo que devuelve al usuario exactamente al fragmento donde acaba de comentar.
¿Por qué validar el contenido antes de persistir?
Esta validación evita guardar comentarios vacíos en la base de datos. Si el textarea viene sin texto, el flujo se salta el persist y el flush, pero igual ejecuta la redirección para que el usuario vuelva a la vista del snippet sin errores visibles.
Es una protección mínima pero importante: mantiene la base de datos limpia y la experiencia del usuario consistente.
¿Cómo se conecta la ruta con el formulario en Twig?
La ruta del controlador sigue el estándar de Symfony con tres partes: el namespace App, el nombre del controlador Comment y el nombre del método new. El resultado es app_comment_new, que es el identificador que usa Twig para resolver la URL del formulario.
Después de actualizar el navegador, el formulario aparece debajo del snippet. Escribes un comentario, haces clic en Publicar y la acción se completa: el comentario queda guardado y visible bajo el fragmento de código.
Con esto, cualquier usuario logueado puede aportar a los snippets de otros, ya sea haciendo fork, editando o comentando. ¿Vas a usar este patrón en tu propia plataforma de código? Cuéntame en los comentarios cómo lo estás aplicando.