ESTRUCTURA DE CARPETAS EN LARAVEL

Laravel es uno de los frameworks de PHP más elegantes y organizados. Su estructura de directorios está pensada para escalabilidad, mantenibilidad y productividad. Entender cada carpeta y archivo desde el primer día ayudará a navegar con fluidez, evitar errores comunes y seguir las mejores prácticas del framework.

Estructura de directorios de un proyecto Laravel

Al crear un nuevo proyecto con laravel, se genera la siguiente estructura.

app

Esta es la carpeta más importante de la aplicación, donde está el código principal del proyecto. Es el corazón lógico de la aplicación:
  • Http/Controllers → Controladores
  • Models → Modelos Eloquent
  • Http/Middleware → Middleware personalizados
  • Providers → Service Providers
  • Exceptions → Manejo de excepciones

bootstrap

Contiene los archivos necesarios para que Laravel arranque. Normalmente no modificas esta carpeta, salvo en casos muy avanzados, como personalizar el archivo "app.php".

config

En esta carpeta se encuentran todos los archivos de configuración de la aplicación:
  • app.php
  • database.php
  • mail.php
  • queue.php
  • services.php
  • etc.
Cualquier ajuste global de tu aplicación pasa por esta carpeta.

database

En esta carpeta está todo lo relacionado con la base de datos:
  • "migrations/": Esta es la carpeta más crítica del directorio ·"database"
    • Cada archivo es una clase que define cambios en el esquema (crear tablas, modificar columnas, índices, foreign keys, etc.).
    • Las migraciones son control de versiones de la base de datos.
    • Se ejecutan con el comando "php artisan migrate".
    • Se puede revertir con los comandos "migrate:rollback", "migrate:reset".
    • Ejemplo de nombre de archivo:"2025_05_19_123456_create_posts_table.php"
    Usar siempre migraciones para cualquier cambio en la estructura de la BD. Nunca hagas cambios manuales en producción.
  • "seeders/": Los "seeders" sirven para insertar datos de prueba o datos iniciales en la base de datos. Se pueden crear "seeders" específicos, como por ejemplo: "UserSeeder", "RoleSeeder", "ProductSeeder", etc.
    Comandos:

    php artisan db:seed
    php artisan db:seed --class=UserSeeder
    php artisan migrate --seed   # migrar + seedear
    
  • "factories/": Contiene los "Model Factories", usando Faker que definen cómo generar datos falsos pero realistas para cada modelo. Se usan principalmente para testing y para "seeders". A partir de Laravel 8/9+ usan la sintaxis de clases.
  • "schema/":
    • Contiene una copia del esquema de la base de datos en formato SQL o en un archivo schema.sqlite.
    • Permite migraciones rápidas en entornos locales o de CI.
    • Cuando se ejecuta el comando "artisan migrate", Laravel puede usar esta copia para restaurar la base de datos mucho más rápido, en vez de ejecutar todas las migraciones una por una.

public

Es la única carpeta que debe ser accesible públicamente por el servidor web. Contiene el archivo index.php que es el punto de entrada de la aplicación En esta carpeta se colocan también los css, js, imágenes y assets compilados, generalmente a través de Vite. /resourcesSepara claramente los recursos de tu aplicación:views/ → Plantillas Blade js/ y css/ → Archivos fuente (TypeScript, Sass, etc.) que luego compila Vite lang/ → Archivos de traducción

routes

Una de las características más potentes y organizadas de Laravel:web.php → Rutas para la web (con sesiones y CSRF) api.php → Rutas para API (prefijo /api y middleware api) console.php → Definición de comandos Artisan channels.php → Broadcasting

storage

Carpeta para archivos generados por la aplicación:
  • "app/": Archivos subidos por usuarios.
  • "framework/cache/": Cache.
  • "logs/": Archivos de log (laravel.log).
  • "framework/sessions/": Sesiones de archivo (si usas driver file).
Es recomendable crear un enlace simbólico con el comando "public/storage" hacia "storage/app/public" con el comando: artisan storage:link".

tests

Aquí van todas tus pruebas automatizadas, Feature tests y Unit tests. Laravel viene con PHPUnit configurado por defecto

vendor

Contiene todas las dependencias instaladas mediante Composer. Nunca se debe modificar ni subir esta carpeta al control de versiones.

Archivos importantes en el directorio raíz

  • ".env": Configuración de entorno (base de datos, claves, servicios externos). Este fichero no se debe subir a Git.
  • ".gitignore": Archivos y carpetas que Git debe ignorar.
  • "artisan": La interfaz de línea de comandos de Laravel. Todas las tareas (migrations, make:*, etc.) se ejecutan a través de este archivo.
  • "composer.json": Dependencias PHP y scripts.
  • "package.json": Dependencias JavaScript y configuración de Vite.
  • "phpunit.xml": Configuración de pruebas.
  • "README.md": Documentación del proyecto.

Recomendaciones finales

  • Mantener la estructura propuesta por Laravel. Solo crea carpetas adicionales cuando realmente sea necesario, por ejemplo, "app/Services", "app/Repositories", "app/Actions".
  • Cuando el proyecto crezca, es común organizar los controladores en subcarpetas dentro de "app/Http/Controllers".
  • UsaR "php artisan": Siempre que puedas, genera archivos con comandos Artisan como "make:controller", "make:model", etc.. Esto coloca los archivos en la ubicación correcta.
  • Mantener limpio el directorio "public", solo deben estar los assets compilados y archivos estáticos esenciales.