Estructura de un proyecto Laravel
Antes de empezar a escribir código, es fundamental que conozcas cómo está organizado un proyecto Laravel. En esta lección exploraremos las carpetas y archivos principales para que sepas dónde va cada cosa.
Vista general
Cuando creas un proyecto Laravel, se genera una estructura de carpetas bien definida. Cada directorio tiene un propósito específico. Veamos los más importantes:
mi-proyecto/
├── app/ # Tu código PHP (modelos, controladores...)
├── bootstrap/ # Arranque del framework
├── config/ # Archivos de configuración
├── database/ # Migraciones, seeders y factories
├── public/ # Punto de entrada web (index.php)
├── resources/ # Vistas, CSS y JavaScript sin compilar
├── routes/ # Definición de rutas
├── storage/ # Archivos generados (logs, cache, uploads)
├── tests/ # Tests automatizados
├── vendor/ # Dependencias de Composer (no tocar)
├── .env # Variables de entorno
├── artisan # CLI de Laravel
├── composer.json # Dependencias PHP
└── package.json # Dependencias JavaScript
No te preocupes si parece mucho. En el día a día
trabajarás principalmente con app/,
routes/, resources/ y
database/.
Carpeta app/
Esta es la carpeta más importante. Aquí va todo el código PHP de tu aplicación:
app/
├── Http/
│ ├── Controllers/ # Controladores
│ └── Middleware/ # Middleware personalizado
├── Models/ # Modelos Eloquent
└── Providers/ # Service Providers
- Models/ - Tus modelos Eloquent (representan tablas de la base de datos)
- Http/Controllers/ - Controladores que manejan las peticiones HTTP
- Http/Middleware/ - Filtros que se ejecutan antes o después de las peticiones
- Providers/ - Configuración de servicios del framework
Otras carpetas como Jobs/,
Events/ o
Mail/ se crean
automáticamente cuando generas esos
archivos con Artisan.
Carpeta routes/
Aquí defines todas las URLs de tu aplicación y qué debe pasar cuando un usuario las visita:
routes/
├── web.php # Rutas para navegador (con sesión y cookies)
├── console.php # Comandos de consola personalizados
└── api.php # Rutas para APIs (opcional, sin sesión)
El archivo web.php es donde pasarás
más tiempo al principio. Por defecto contiene
una ruta que muestra la página de bienvenida de
Laravel.
Carpeta resources/
Contiene todo lo relacionado con la interfaz de usuario:
resources/
├── views/ # Plantillas Blade (HTML)
├── css/ # Estilos CSS (procesados por Vite)
└── js/ # JavaScript (procesado por Vite)
- views/ - Plantillas Blade que generan el HTML
- css/ - Archivos CSS que Vite procesa y optimiza
- js/ - Archivos JavaScript que Vite procesa y optimiza
Carpeta database/
Todo lo relacionado con la base de datos:
database/
├── migrations/ # Cambios en la estructura de la BD
├── factories/ # Generadores de datos de prueba
└── seeders/ # Datos iniciales para la BD
- migrations/ - Archivos que definen y modifican tablas
- factories/ - Para generar datos falsos en tests
- seeders/ - Para insertar datos iniciales
Carpeta config/
Contiene todos los archivos de configuración de Laravel. Cada aspecto del framework tiene su propio archivo:
-
app.php- Configuración general de la aplicación -
database.php- Conexiones a bases de datos -
mail.php- Configuración de correo -
cache.php- Configuración de caché
Los archivos de
config/ leen valores del
archivo .env. Nunca pongas
contraseñas o claves API directamente en
los archivos de configuración.
Carpeta public/
Es el único directorio accesible desde el navegador. Contiene:
-
index.php- Punto de entrada de todas las peticiones - Archivos CSS y JS compilados por Vite
- Imágenes y otros assets públicos
Tu servidor web debe apuntar a esta carpeta, no a la raíz del proyecto.
Carpeta storage/
Laravel guarda aquí archivos generados durante la ejecución:
storage/
├── app/ # Archivos de la aplicación (uploads)
├── framework/ # Cache, sesiones, vistas compiladas
└── logs/ # Archivos de log
Si necesitas guardar archivos subidos por
usuarios, van en storage/app/.
El archivo .env
Este archivo contiene las variables de entorno de tu aplicación. Aquí configuras:
APP_NAME=MiAplicacion
APP_ENV=local
APP_DEBUG=true
DB_CONNECTION=sqlite
MAIL_MAILER=log
Cada entorno (desarrollo, producción) tiene su
propio archivo .env con valores
diferentes. Este archivo nunca se sube al
repositorio.
Archivos en la raíz
Algunos archivos importantes en la raíz del proyecto:
-
artisan- CLI de Laravel para ejecutar comandos -
composer.json- Dependencias PHP del proyecto -
package.json- Dependencias JavaScript (para Vite) -
vite.config.js- Configuración de Vite para assets -
.gitignore- Archivos que Git debe ignorar
Ejercicios
Ejercicio 1: Explorar tu proyecto
Abre tu proyecto Laravel en un editor de código (VS Code, Zed, PHPStorm, etc.) y navega por las carpetas principales. Identifica dónde están los controladores, las vistas y las rutas.
Ejercicio 2: Revisar el archivo .env
Abre el archivo .env de tu proyecto
y observa las variables que contiene. Identifica
qué base de datos está configurada y cuál es el
nombre de tu aplicación.
Ejercicio 3: Encontrar la ruta de bienvenida
Abre el archivo routes/web.php y
encuentra la ruta que muestra la página de
bienvenida de Laravel. Luego busca la vista
correspondiente en
resources/views/.
Resumen
La estructura de Laravel está diseñada para mantener tu código organizado:
-
app/contiene tu código PHP (modelos, controladores) -
routes/define las URLs de tu aplicación -
resources/tiene las vistas y assets -
database/gestiona la estructura de la base de datos -
config/almacena la configuración -
.envguarda las variables de entorno sensibles
Con el tiempo, esta organización se volverá natural y te ayudará a encontrar rápidamente lo que buscas.
¿Has encontrado un error o tienes una sugerencia para mejorar esta lección?
Escríbenos¿Te está gustando el curso?
Tenemos cursos premium con proyectos reales, soporte personalizado y certificado.
Descubrir cursos premium