Dime si no te ha pasado: estás picando código a altas horas, das clic a un botón flamante en tu panel de administración, y la pantalla te arroja un frío e implacable Error 404 🥶.

En ese momento empieza la ruleta rusa mental del desarrollador:

  • 🧐 ¿Escribí mal la URL en el archivo de rutas?
  • 👻 ¿La ruta sí está dada de alta, pero se me olvidó crear el método en el controlador?
  • 🔒 ¿O el usuario simplemente no tiene permisos y el sistema decidió fingir demencia ocultando la página como 404?

Hasta ahora, en julio101290/boilerplate, cualquier tropiezo en los filtros de acceso lanzaba una excepción silenciosa. Y para ponerle más drama al asunto, si un usuario sin sesión activa caía en una página de error, la barra superior de AdminLTE colapsaba con el clásico:

💥 Call to undefined function user() in header.php

¡Se acabaron las adivinanzas a ciegas! Llegó una actualización directa a las entrañas del paquete para que tu consola y tu pantalla te digan la verdad sin rodeos 🔍⚡.

🛠️ ¿Qué hay de nuevo bajo el capó?

En lugar de meter todos los fallos en la misma bolsa del 404, ahora el boilerplate audita la petición y clasifica el problema en tres escenarios visuales clarísimos:

1. 🛡️ Falta de Permisos (Acceso Denegado 403)

El filtro ya no enmascara el acceso denegado. Si el usuario intenta entrar a un módulo para el que no tiene privilegios (por ejemplo manage-user), el panel muestra una tarjeta de advertencia en color ámbar señalando con precisión quirúrgica:

  • «Acceso Restringido: Te falta el permiso [nombre-del-permiso]».

2. 🗺️ La Ruta No Existe (404 Genuino)

Si escribiste mal la URL en el navegador o hay un enlace roto en el menú, el enrutador captura la petición y despliega una tarjeta roja indicando la URI consultada, confirmando que esa regla jamás ha existido en tus rutas.

3. 🧩 Ruta Registrada, pero Código Faltante (¡Atrapado con las manos en el código!)

Este es el auténtico salvavidas para el día a día. Si ya registraste la ruta apuntando a VentasController::cobrar, pero aún no has creado la clase o se te olvidó escribir la función cobrar(), el sistema utiliza reflexión de PHP e inspecciona el archivo:

  • ⚠️ «La ruta está bien, pero la clase VentasController no existe.»
  • ⚠️ «El controlador existe, pero el método cobrar() no está declarado.»

4. 🦺 Layout y Navbar Blindados al 100%

Se reforzó header.php para cargar el helper de autenticación bajo demanda y verificar si existe una sesión activa antes de consultar user()->profile_image. Cero errores fatales si un visitante anónimo o un bot cae en una página rota.

🔍 Revisa el código del cambio

Todos los detalles técnicos y el diff de esta actualización están disponibles en el repositorio oficial:

👉 Commit con los cambios: Ver en GitHub (commit a50a68d)

📦 Pruébalo y mantente al día

Esta mejora te ahorrará horas de depuración fantasma en CodeIgniter 4, manteniendo tu arquitectura limpia, robusta y amigable con el equipo de desarrollo.

Para no perderte las próximas actualizaciones de módulos, tutoriales y recursos de código, pásate por mis canales oficiales: