Skip to main content
En Laravel 11 la estructura de la aplicación cambió notablemente con el llamado «Slim Application Skeleton». Este documento reúne los puntos que suelen resultar confusos cuando te incorporas a un proyecto que se actualizó conservando la estructura antigua o cuando aprendiste con libros y tutoriales de Laravel 10 o anteriores. Son preguntas frecuentes que aparecían en los foros de Laracasts y en Stack Overflow cuando se lanzó Laravel 11.
Este FAQ se centra en proyectos nuevos (Laravel 11 o posterior). Si necesitas actualizar un proyecto existente, consulta la guía de migración.
En la nueva estructura, se han eliminado del proyecto los archivos de config que rara vez se modifican. Para esos archivos se usa el config/ incluido en el framework.Los config/ del proyecto y del framework se fusionan, y el del proyecto tiene prioridad. Cuando necesites personalizar algo, crea el archivo y los cambios se aplicarán.
En la nueva estructura de Laravel 11, App\Http\Controllers\Controller es una clase vacía, no extiende Illuminate\Routing\Controller y no usa los traits ValidatesRequests ni AuthorizesRequests.Referencia: Controller de Laravel 10 vs Controller de Laravel 11Alternativas:
Si los usas con frecuencia, también puedes restaurar App\Http\Controllers\Controller como en Laravel 10.
En la nueva estructura, app/Http/Kernel.php ha desaparecido. La configuración del middleware se hace mediante withMiddleware() en bootstrap/app.php.
Los archivos de los middlewares personalizados siguen creándose en app/Http/Middleware/.
$this->middleware() era una funcionalidad de Illuminate\Routing\Controller y no está disponible en la nueva clase base vacía.En su lugar, implementa la interfaz HasMiddleware y define el método middleware().
Desde Laravel 13, también puedes utilizar el atributo #[Middleware].
Referencia: Middleware de controlador
authorizeResource() depende del trait AuthorizesRequests, por lo que no está disponible en la clase base vacía de la nueva estructura.Hay varias formas de resolverlo.1. Devolver la clase base al estilo Laravel 10 (la opción más sencilla)
Así podrás volver a usar $this->authorizeResource().2. Aplicar el atributo #[Authorize] de Laravel 13 a cada método
En la nueva estructura, app/Console/Kernel.php ha desaparecido y el sitio para configurar el schedule ha cambiado.Definirlo en routes/console.php (recomendado):
Definirlo en bootstrap/app.php:
En la nueva estructura, EventServiceProvider ha desaparecido y ya no es necesario registrar manualmente los eventos y sus listeners.Cómo funciona el registro automático: basta con declarar el tipo del evento en el argumento del método handle() del listener para que se registre automáticamente.
Si necesitas registrarlo manualmente, hazlo en AppServiceProvider::boot().
En la nueva estructura, la lista de service providers se gestiona desde bootstrap/providers.php en lugar de config/app.php.
Los providers creados con artisan make:provider se añaden aquí automáticamente.
En la nueva estructura, app/Exceptions/Handler.php ha desaparecido y el manejo de excepciones se configura con withExceptions() en bootstrap/app.php.
La personalización de las rutas se hace con withRouting() en bootstrap/app.php.Añadir archivos de rutas:
Control completo (equivalente al RouteServiceProvider de Laravel 10):Si especificas using, el registro de rutas por defecto de Laravel queda completamente desactivado y podrás controlar todo por tu cuenta.
Si añades una clave providers en config/app.php, se fusionará con el config/app.php interno del framework y surtirá efecto.
Con el método replace() puedes sustituir un provider por defecto por tu propia implementación.
Desde Laravel 11, las funciones de API no están incluidas por defecto; se instalan de forma individual cuando se necesitan.
Este comando crea y configura lo siguiente:
  • routes/api.php
  • Configuración de Laravel Sanctum para la autenticación de la API.
  • Registro de las rutas de API en bootstrap/app.php.
Desde Laravel 11, la funcionalidad de broadcasting tampoco viene incluida por defecto; se instala aparte cuando se necesita.
Este comando crea y configura lo siguiente:
  • routes/channels.php
  • Configuración de instalación de Laravel Reverb.
  • Archivo de configuración de broadcasting.
Revisa el contenido de bootstrap/app.php.Nueva estructura de Laravel 11 (o ya migrada):
Proyecto de Laravel 10 o anterior actualizado sin migrar la estructura:
Si tiene el formato return Application::configure(..., es la nueva estructura; en caso contrario, es un proyecto actualizado manteniendo la estructura antigua. Para migrar un proyecto de la estructura antigua a la nueva, consulta la guía de migración.

Páginas relacionadas

Estructura de aplicación en Laravel 11 y posteriores

Explica en detalle la nueva estructura de la aplicación y la implementación interna de ApplicationBuilder.

Guía de migración de la estructura antigua a la nueva

Cubre los pasos para migrar un proyecto desde la estructura antigua de Laravel 10 a la nueva estructura de Laravel 11 y posteriores.
Última modificación el 13 de julio de 2026