Configurar un formulario de edición para las preguntas de un foro es un paso fundamental para completar el ciclo de interacción del usuario: preguntar, responder, editar y crear. Aquí se construye toda la estructura necesaria —controlador, vista, ruta y enlace— siguiendo el enfoque tradicional de Laravel, sin recurrir a Livewire para esta funcionalidad específica.
¿Cómo crear el controlador para gestionar preguntas?
El punto de partida es generar un controlador dedicado a las preguntas mediante el comando php artisan make:controller [00:38]. Este controlador necesita dos dependencias principales: el modelo de categorías y el modelo de pregunta.
Dentro del controlador se define el método edit, cuya responsabilidad es doble:
- Consultar todas las categorías disponibles para mostrarlas en el formulario.
- Recibir la pregunta específica que se desea editar.
- Retornar la vista correspondiente con ambos datos.
El método de edición es distinto al método de actualización (update). El primero muestra el formulario, mientras que el segundo procesa la acción de guardar los cambios [01:08]. Esta separación es parte del patrón de un CRUD completo en Laravel, que contempla siete funciones: index, create, store, show, edit, update y destroy.
¿Cómo estructurar la vista de edición con Blade?
La vista se organiza dentro de una carpeta dedicada a preguntas y se nombra como editar.blade.php [01:40]. La estructura base se toma de un componente Blade existente, como el de perfil, y se adapta.
¿Qué elementos componen el formulario?
El formulario apunta a la ruta de actualización de la pregunta mediante el helper de Laravel route(), utilizando el método POST junto con las directivas @csrf y @method('PUT') para que funcione correctamente [02:38].
- Título H2: con texto "Editar pregunta" y clases de estilo como
mb, text-xl, font-semibold y color white/90.
- Campos del formulario: se aíslan en una vista parcial llamada
formulario.blade.php para reutilizarlos tanto en edición como en creación [03:22].
- Botón de envío: con texto "Editar pregunta" y clases de diseño que incluyen gradiente de azul 600 a 700, efecto hover, esquinas redondeadas y
text-xs.
Esta técnica de aislar los campos en una vista parcial es clave para mantener el código DRY (Don't Repeat Yourself). Cuando más adelante se construya el formulario de creación, bastará con incluir la misma vista parcial sin duplicar código [03:30].
¿Cómo registrar las rutas con resource y except?
Las rutas se registran usando Route::resource() dentro del grupo ya existente [04:02]. La configuración indica al framework que genere las rutas CRUD, pero excluyendo tres funciones que no se necesitan en este contexto:
php
Route::resource('preguntas', PreguntaController::class)
->except(['show', 'index', 'destroy']);
De las siete funciones propias de un CRUD, se utilizan cuatro: edit, update, create y store [05:55]. Las tres restantes se excluyen porque el listado y la visualización individual ya se manejan desde el componente Livewire, y la eliminación no se contempla en esta etapa.
¿Cómo conectar el botón de editar con la ruta correcta?
Dentro del componente de Livewire que lista las preguntas, cada botón de editar necesita apuntar a la ruta recién creada [04:30]. Se utiliza la sintaxis de doble llave de Blade:
php
{{ route('preguntas.edit', $pregunta) }}
El nombre de la ruta combina el prefijo asignado en Route::resource() con la acción edit, y recibe como parámetro la pregunta actual del bucle.
Durante la implementación surgieron correcciones menores: nombres de carpetas en singular en lugar de plural y términos escritos correctamente en inglés [05:10]. Estos detalles son importantes porque Laravel usa convenciones de nomenclatura para resolver automáticamente las rutas y los modelos.
Con estos cambios, todos los botones de edición funcionan y redirigen al formulario correspondiente. La siguiente etapa será completar los campos dentro de la vista parcial formulario.blade.php con el título, la categoría y la descripción del problema. ¿Has trabajado con este patrón de vistas parciales en tus proyectos? Comparte tu experiencia.