Contenido del curso

Crear y editar preguntas con un solo formulario

Resumen

Crear preguntas en una comunidad estilo foro con Laravel exige reutilizar lo que ya construiste en clases anteriores: el controlador, las validaciones y los campos del formulario. Aquí verás cómo configurar el método de creación de preguntas reaprovechando la vista de edición y enlazando la relación de usuario con sus preguntas.

Cómo reutilizar el controlador para crear una pregunta

El punto de partida es el controlador. Los métodos de editar y actualizar ya tienen la lógica que necesitas, así que puedes copiarlos y adaptarlos para create y store.

En el método create pasas las categorías a la vista, igual que en edición, pero envías la entidad pregunta como un valor nulo. Eso permite que el formulario funcione tanto para crear como para editar sin duplicar código.

En el método store mantienes la validación que ya existía y disparas la creación desde el usuario autenticado. La instrucción queda así: tomas el usuario logueado, accedes a su relación preguntas y llamas al método de creación con los datos validados. Después rediriges a la ventana principal.

¿Por qué se envía la entidad pregunta al crear si todavía no existe? Porque la vista del formulario espera esa variable en sus campos. Al pasarla como nula, los inputs se renderizan vacíos y el mismo formulario sirve para crear y editar.

Cómo enlazar la relación entre usuario y preguntas

Para que el usuario logueado pueda crear preguntas a través de su relación, necesitas declararla en la entidad User. Ya tenías una relación de uno a muchos con respuestas; ahora agregas otra con preguntas siguiendo el mismo patrón.

Esta relación es la que habilita la sintaxis user()->preguntas()->create() dentro del controlador. Sin ella, el método de creación encadenado no funciona.

  • Declara la relación hasMany hacia el modelo de preguntas en la entidad usuario.
  • Usa esa relación para crear registros asociados automáticamente al usuario autenticado.
  • Mantén la convención de nombres para que Laravel resuelva la llave foránea sin configuración extra.

Con la relación lista, cada pregunta queda vinculada al autor sin que tengas que asignar manualmente el user_id.

Cómo configurar la vista y el botón de preguntar

La vista de creación se construye con un archivo blade.php nuevo. Copias el contenido de la vista de edición y ajustas tres cosas: el título de la página pasa a ser "Preguntar a la comunidad", eliminas la directiva del método PUT porque ya no aplica, y cambias el texto del botón a "Crear pregunta".

El formulario apunta a la ruta store sin necesidad de modificar la dirección, porque el helper de Laravel reconoce si estás creando o editando según el contexto del modelo.

En el componente del botón de preguntar, defines el enlace usando la sintaxis de Blade con doble llave y la ruta nombrada .create. Así el usuario llega al formulario desde cualquier parte del sitio.

¿Cómo se logra que el mismo formulario sirva para crear y editar? Reutilizando los campos en un parcial compartido. La variable de la pregunta llega nula al crear y poblada al editar, y los inputs se comportan según ese valor.

Por qué conviene reutilizar campos entre crear y editar

La técnica de compartir los campos del formulario entre ambas vistas evita duplicar código y reduce errores cuando agregas o modificas un input. Cualquier cambio se refleja al mismo tiempo en creación y edición.

Al probar el flujo completo: el botón "Preguntar a la comunidad" lleva al formulario, seleccionas una categoría, escribes el título y el contenido, envías y la pregunta queda creada bajo tu usuario. Desde ahí puedes visitarla y responder, manteniendo toda la funcionalidad previa intacta.

  • Diseñas el formulario una sola vez.
  • Agregas el enlace para preguntar desde el componente principal.
  • Registras la relación entre usuario y preguntas.
  • Ejecutas los métodos create y store en el controlador.

Con estos cuatro pasos cierras el ciclo de creación. ¿Cómo organizas tú la reutilización de formularios en tus proyectos Laravel? Cuéntalo en los comentarios.