Contenido del curso
Diseño de un foro
- 5

Flujo completo de Laravel: ruta, controlador, modelo y vista
07:55 min - 6

Diseño home en Laravel con Tailwind CSS
09:48 min - 7

Desarrollo de página de detalles con rutas dinámicas en Laravel
07:43 min - 8

Creación de componentes Blade para plantillas reutilizables en Laravel
07:11 min - 9

Pregunta con respuestas dinámicas en Laravel
05:19 min - 10

Relaciones polimorfas para comentarios en Laravel
06:33 min
Livewire
Optimización
CRUD
Detalles finales
Formulario para responder preguntas en Laravel
Resumen
Permitir que los usuarios respondan preguntas dentro de un foro requiere un formulario funcional, una ruta válida y validaciones tanto visuales como del lado del servidor. Aquí aprenderás a construir ese flujo completo en Laravel, conectando el formulario con un controlador, una relación entre modelos y una redirección final que mantiene la experiencia fluida.
¿Cómo se estructura el formulario de respuesta en la vista?
El formulario vive al final de cada pregunta y mantiene un diseño simple: un título, un textarea y un botón de envío. La idea es que cualquier usuario que entre a una pregunta pueda escribir su respuesta sin distracciones.
El marcado incluye un bloque que recupera el mensaje de validación, lo que permite mostrar errores cuando el contenido está vacío o supera el límite permitido. Este formulario se pega directamente dentro de la vista de la pregunta y queda listo para conectarse con la ruta correspondiente.
¿Qué elementos mínimos necesita un formulario de respuesta? Un título descriptivo, un textarea para el contenido y un botón de envío. Además, un contenedor para mostrar errores de validación devueltos por el servidor.
¿Cómo definir la ruta y el controlador para guardar respuestas?
El flujo sigue el patrón tradicional de Laravel: ruta, controlador, lógica y redirección. La ruta se registra en web.php con el método post, ya que vamos a modificar la base de datos.
El nombre de la ruta es respuestas.store y recibe la pregunta como parámetro, porque cada respuesta pertenece a una pregunta específica. Para crear el controlador se usa el comando de Artisan:
bash php artisan make:controller RespuestaController
Dentro del controlador se define el método store, que recibe dos cosas: la instancia de la pregunta mediante route model binding y el request con los datos del formulario. Esa consulta implícita ahorra tener que buscar la pregunta manualmente.
¿Qué hace el método store paso a paso?
- Recibe la pregunta resuelta automáticamente por el modelo.
- Valida que el campo
contentsea obligatorio, de tipo string y con máximo 1900 caracteres. - Crea la respuesta usando la relación definida en el modelo de pregunta.
- Asigna el contenido validado y el usuario autenticado.
- Redirige de vuelta a la pregunta con
back().
El uso de la relación respuestas()->create() aprovecha Eloquent para asignar automáticamente la clave foránea de la pregunta. Esto evita asignaciones manuales y mantiene el código limpio.
¿Cómo proteger el modelo y validar los datos?
Al intentar guardar por primera vez aparece un error relacionado con la asignación masiva. Es la misma protección que se configuró cuando se trabajó con comentarios.
La solución está en el modelo Respuesta, donde se declara la propiedad $fillable con los campos permitidos: content y el identificador del usuario. Esta capa evita que se asignen campos no autorizados desde el formulario.
¿Por qué Laravel exige declarar fillable? Es una capa de seguridad contra mass assignment. Sin ella, un atacante podría enviar campos extra en el formulario y modificar columnas sensibles del modelo.
¿Cómo funciona la validación en dos capas?
La validación opera en dos niveles que se complementan. Por un lado está el atributo required del HTML, que bloquea el envío del formulario cuando el textarea está vacío. Es la primera línea de defensa, rápida y visual.
Si se elimina ese atributo, el navegador deja pasar el envío, pero entonces se activa la validación del lado de PHP. Laravel detecta que el campo es obligatorio según las reglas declaradas en el método store y devuelve el error correspondiente, que se muestra en el bloque de mensajes del formulario.
Esta doble capa cubre dos escenarios: usuarios que interactúan normalmente con el navegador y peticiones que evaden el HTML. Ambas son necesarias para mantener la integridad de los datos.
¿Basta con la validación HTML para proteger un formulario? No. La validación HTML mejora la experiencia, pero es fácil de saltar. La validación del lado del servidor es la que realmente garantiza que los datos guardados cumplan las reglas.
¿Cómo se conecta la respuesta con elementos reactivos?
Una vez guardada, la respuesta aparece al final de la pregunta y puede recibir comentarios. Esa funcionalidad de comentarios se construyó previamente como un componente de LiveWire, lo que aporta reactividad sin recargar la página.
El resultado es un foro que combina lo mejor de dos mundos: el formulario de respuesta usa el flujo web tradicional con post, controlador y redirección, mientras que los comentarios sobre cada respuesta funcionan con elementos reactivos. Esa mezcla es común en aplicaciones reales donde no todo necesita ser reactivo.
Este mismo patrón aplica también al módulo de blog, donde el flujo de creación de respuestas o comentarios sigue la misma lógica. ¿Ya implementaste tu formulario? Cuéntame en los comentarios qué validaciones añadirías para enriquecer la experiencia.