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.
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"
- "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ónroutes
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 → Broadcastingstorage
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).
tests
Aquí van todas tus pruebas automatizadas, Feature tests y Unit tests. Laravel viene con PHPUnit configurado por defectovendor
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.