Saltar al contenido principal

Introducción

La estructura por defecto de una aplicación Laravel ofrece un buen punto de partida tanto para aplicaciones grandes como pequeñas. Sin embargo, eres libre de organizar tu aplicación como quieras. Laravel apenas impone restricciones sobre dónde ubicar las clases, siempre que Composer pueda cargarlas automáticamente.

Directorio raíz

Al crear un proyecto Laravel nuevo se genera una estructura como la siguiente.
example-app/
├── app/
├── bootstrap/
├── config/
├── database/
├── public/
├── resources/
├── routes/
├── storage/
├── tests/
├── vendor/
├── .env
├── artisan
└── composer.json

Directorio app/

Contiene el código principal de la aplicación. Casi todas las clases (controladores, modelos, middlewares, etc.) se colocan aquí. Por defecto incluye los subdirectorios Http, Models y Providers. Al generar clases con comandos Artisan, también se crean automáticamente otros subdirectorios.

Directorio bootstrap/

Contiene el archivo app.php que arranca el framework. También contiene el subdirectorio cache/, que guarda archivos de optimización de rendimiento como la caché de rutas o la de servicios.

Directorio config/

Almacena todos los archivos de configuración de la aplicación. Es recomendable leer estos archivos para conocer las opciones disponibles.

Directorio database/

Almacena las migraciones, las model factories y los seeders de la base de datos. También puedes ubicar aquí el archivo de base de datos SQLite.

Directorio public/

Contiene index.php, el punto de entrada de todas las solicitudes a la aplicación. Aquí también se almacenan los assets como imágenes, JavaScript o CSS.
Configura el document root del servidor web apuntando al directorio public/ del proyecto Laravel. Publicar directamente la raíz del proyecto o un subdirectorio expone archivos sensibles.

Directorio resources/

Contiene las vistas y los assets sin compilar (CSS, JavaScript, etc.).

Directorio routes/

Contiene todas las definiciones de rutas de la aplicación. Por defecto se incluyen dos archivos de rutas: web.php y console.php.
ArchivoUso
web.phpRutas dirigidas al navegador. Se les aplica el grupo de middleware web, que aporta sesión, protección CSRF y cifrado de cookies.
console.phpArchivo para definir comandos Artisan mediante closures.
api.phpRutas de API sin estado. Se añade con el comando install:api.
channels.phpArchivo para registrar los canales de broadcasting de eventos.

Directorio storage/

Almacena archivos generados por el framework: logs, plantillas Blade compiladas, sesiones basadas en archivos, caché de archivos, etc. Se divide en tres subdirectorios: app/, framework/ y logs/.

Directorio tests/

Contiene las pruebas automatizadas. Incluye ejemplos de pruebas unitarias y de funcionalidad usando Pest o PHPUnit.

Directorio vendor/

Contiene las dependencias de Composer. No lo confirmes en el control de versiones.

Detalles del directorio app/

Muchas clases del directorio app pueden generarse con comandos Artisan. Para ver los comandos disponibles ejecuta:
php artisan list make
Contiene controladores, middlewares y form requests. Casi toda la lógica de procesamiento de las solicitudes se ubica aquí.
Contiene todas las clases de modelos Eloquent. Existe un “modelo” por cada tabla de la base de datos, que se utiliza para consultar e insertar datos.
Contiene todos los service providers de la aplicación. Los service providers registran servicios en el contenedor, registran eventos y realizan las tareas necesarias para arrancar la aplicación.
Contiene todos los comandos Artisan personalizados. Se generan con el comando make:command.
Contiene todas las excepciones personalizadas de la aplicación. Se generan con el comando make:exception.

Archivos importantes

Archivo .env

Gestiona los valores de configuración que varían por entorno (credenciales de base de datos, claves de API, etc.). Se accede a ellos a través del helper env() desde los archivos de configuración de config/.
APP_NAME=Laravel
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost

DB_CONNECTION=sqlite

Archivo artisan

Es el punto de entrada de la interfaz de línea de comandos Artisan. Se ejecuta con el formato php artisan <nombre_del_comando>.

Próximos pasos

Enrutamiento

Aprende a definir rutas y a asociar URLs con la lógica de la aplicación.
Última modificación el 13 de julio de 2026