08 CRUD Módulo Empleados Create Store, Asignación de Rol Spatie Subida de archivos Laravel FullStack
Duración: 28 minDescripción
🔍 Lección 8: CRUD Módulo Empleados – Create, Store, Asignación de Rol Spatie y Subida de Archivos en Laravel 🚀
En este capítulo avanzamos hacia un módulo más complejo: la gestión de Empleados. A diferencia de los módulos anteriores, el alta de un empleado requiere una relación directa con la tabla de users, la asignación de un rol de permisos con Spatie y el almacenamiento de archivos (avatar) en el almacenamiento del sistema.
🎯 Lo realizado en este capítulo
- 🛣️ Rutas Web y Navegación:
- En routes/web.php, se añadieron las rutas RESTful para el EmpleadoController.
- A diferencia de los módulos previos, se habilitó la ruta explícita Route::get('/empleados/{id}', [EmpleadoController::class, 'show']) para la vista detallada de perfiles.
- Se integró la opción de Empleados dentro de la barra de navegación lateral (vertical-nav.blade.php).
- 🎨 Incorporación de Iconos Bootstrap y Formulario Elegante:
- En resources/views/layouts/includes/head.blade.php se importó la librería de Bootstrap Icons para mejorar los inputs visuales del formulario (input-group).
- Se crearon las vistas Blade en resources/views/empleados/: index, create, edit y show.
- ⚙️ Lógica Multitabla en el Método store (Inserción simultánea en 3 tablas):
- 1. Creación en users: Se genera la cuenta de acceso concatenando nombres + apellidos para el username. El correo actúa como usuario y el número de documento de identidad se asigna como contraseña encriptada por defecto.
- 2. Asignación de Rol (Spatie): Con $usuario->assignRole('empleado'), se vincula el nuevo usuario a la tabla model_has_roles.
- 3. Registro en empleados: Se insertan los datos personales (teléfono, dirección, profesión, fecha de nacimiento, género) enlazando la clave foránea usuario_id.
- 📁 Subida y Almacenamiento de Archivos (Avatar):
- Se configuró el envío del formulario usando enctype="multipart/form-data".
- Se ejecutó el comando en terminal php artisan storage:link para vincular la carpeta storage/app/public con el directorio accesible public/storage.
- Se guarda la foto de perfil en el disco usando $request->file('avatar')->store('avatars', 'public').
🗄️ Próximo paso
En la Lección 9 completaremos las acciones restantes del CRUD de Empleados: la vista de detalle (show), la edición de perfiles (edit / update) y la eliminación (destroy), además de limpiar los seeders iniciales para mantener únicamente las cuentas administrativas del sistema.