23 Acción UPDATE Usuarios en LARAVEL(PHP-MySql) FullStack

Duración: 13 min
Módulo: 👤 CRUD de Usuarios y UX Avanzada Lección 15 de 17

Descripción

💾 Lección 23: Implementación de la Acción 'Actualizar' (Update) para Usuarios

Título del Video: 23 Acción UPDATE Usuarios en LARAVEL (PHP-MySql) FullStack

Esta lección es la continuación directa de la lección anterior y se enfoca en completar la funcionalidad de edición de usuarios, específicamente en el proceso de guardar los cambios en la base de datos a través de la acción update().

1. 🗺️ Definición de la Ruta de Actualización (web.php)

Se define la ruta que recibirá los datos enviados desde el formulario de edición para procesar la actualización.

  • Método: Se utiliza el método Route::put() [01:02]. Aunque los formularios HTML solo admiten GET y POST, Laravel utiliza una directiva especial en el formulario para simular la petición PUT o PATCH, que es la forma correcta de indicar una modificación completa de un recurso en REST.
  • Estructura: La URL es similar a la de show, incluyendo el ID del usuario: /admin/usuarios/{id} [01:11].
  • Función Asociada: Esta URL se asocia con la función update del controlador.

2. 📝 Configuración del Formulario de Edición (edit.blade.php)

El formulario de edición se ajusta para que apunte a la nueva ruta de actualización con el método PUT.

  • Atributo action: La acción del formulario se configura para enviar los datos a la ruta que incluye el ID del usuario actual [02:15].
  • Token CSRF: Se mantiene la directiva @csrf para proteger contra ataques de falsificación de peticiones en sitios cruzados.
  • Método HTTP: Se añade la directiva @method('PUT') (o @method('PATCH')) dentro del formulario. Esta directiva le indica a Laravel que, aunque la petición se envía como POST, debe interpretarse como una petición PUT o PATCH [02:53].

3. 👩‍💻 Lógica del Controlador (UserController.php)

La función update() es la encargada de recibir la petición (Request), validar los datos y aplicar los cambios.

A. Validación de Datos

  • La validación se copia del método store(), pero se hacen dos ajustes cruciales:
    1. Contraseña Opcional: La regla required se elimina de los campos de contraseña. Solo se mantienen reglas como max y confirmed, permitiendo que el usuario no envíe una contraseña si no desea cambiarla [04:13].
    2. Validación de unique para email: Para permitir que un usuario guarde su propio registro sin cambiar su correo, se modifica la regla unique:users,email para que ignore el ID del usuario que se está editando. Esto evita que el sistema detecte su propio correo como un duplicado existente [10:21].

B. Proceso de Actualización

  • Búsqueda: Se utiliza el modelo User::find($id) para recuperar la instancia del usuario existente en la base de datos [04:46].
  • Asignación de Campos: Se asignan los nuevos valores (name y email) a la instancia del usuario recuperado [05:20].
  • Lógica Condicional de Contraseña: Se implementa un if para verificar si el usuario ha introducido una nueva contraseña ($request->filled('password')). Solo si se ha introducido un valor en el campo, la contraseña se encripta con Hash::make() y se asigna al usuario. Si el campo está vacío, la contraseña existente no se toca [06:36].
  • Guardado: Se llama al método $usuario->save() para persistir los cambios en la base de datos [05:53].
  • Redirección: Finalmente, se redirige al usuario a la vista de listado (admin.usuarios.index) con un mensaje de éxito (with('success', ... )) [07:23].

Esto completa la funcionalidad de edición, permitiendo actualizar cualquier usuario, con o sin cambio de contraseña, y manteniendo la validación de unicidad del correo electrónico.