Lección 4 de 45 8 min de lectura

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:

Estructura
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:

Estructura
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
Carpetas que se crean después

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:

Estructura
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:

Estructura
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:

Estructura
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é
Usa .env para valores sensibles

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:

Estructura
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:

.env
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
  • .env guarda las variables de entorno sensibles

Con el tiempo, esta organización se volverá natural y te ayudará a encontrar rápidamente lo que buscas.

¿Te está gustando el curso?

Tenemos cursos premium con proyectos reales, soporte personalizado y certificado.

Descubrir cursos premium