Estructura de Directorios
Introducción
La estructura de aplicación predeterminada de Laravel está diseñada para proporcionar un excelente punto de partida tanto para aplicaciones grandes como pequeñas. Pero puedes organizar tu aplicación como desees. Laravel impone casi ninguna restricción sobre dónde se puede ubicar una clase dada, siempre que Composer pueda autoload la clase.
[!NOTE] ¿Nuevo en Laravel? Consulta el Laravel Bootcamp para un recorrido práctico por el framework mientras te guiamos en la construcción de tu primera aplicación Laravel.
El Directorio Raíz
El Directorio de la Aplicación
El directorio app
contiene el código principal de tu aplicación. Exploraremos este directorio en más detalle pronto; sin embargo, casi todas las clases en tu aplicación estarán en este directorio.
El Directorio de Bootstrap
El directorio bootstrap
contiene el archivo app.php
que inicializa el framework. Este directorio también alberga un directorio cache
que contiene archivos generados por el framework para la optimización del rendimiento, como los archivos de caché de rutas y servicios.
El Directorio de Configuración
El directorio config
, como su nombre implica, contiene todos los archivos de configuración de tu aplicación. Es una buena idea leer todos estos archivos y familiarizarte con todas las opciones disponibles para ti.
El Directorio de la Base de Datos
El directorio database
contiene tus migraciones de base de datos, fábricas de modelos y semillas. Si lo deseas, también puedes usar este directorio para contener una base de datos SQLite.
El Directorio Público
El directorio public
contiene el archivo index.php
, que es el punto de entrada para todas las solicitudes que ingresan a tu aplicación y configura la carga automática. Este directorio también alberga tus recursos como imágenes, JavaScript y CSS.
El Directorio de Recursos
El directorio resources
contiene tus vistas así como tus activos sin compilar, como CSS o JavaScript.
El Directorio de Rutas
El directorio routes
contiene todas las definiciones de rutas para tu aplicación. Por defecto, se incluyen dos archivos de rutas con Laravel: web.php
y console.php
.
El archivo web.php
contiene rutas que Laravel coloca en el grupo de middleware web
, que proporciona estado de sesión, protección CSRF y cifrado de cookies. Si tu aplicación no ofrece una API RESTful sin estado, entonces es muy probable que todas tus rutas estén definidas en el archivo web.php
.
El archivo console.php
es donde puedes definir todos tus comandos de consola basados en funciones anónimas. Cada función anónima está vinculada a una instancia del comando, lo que permite un enfoque simple para interactuar con los métodos de IO de cada comando. Aunque este archivo no define rutas HTTP, define puntos de entrada basados en consola (rutas) en tu aplicación. También puedes programar tareas en el archivo console.php
.
Opcionalmente, puedes instalar archivos de ruta adicionales para las rutas de API (api.php
) y los canales de transmisión (channels.php
), a través de los comandos Artisan install:api
y install:broadcasting
.
El archivo api.php
contiene rutas que están diseñadas para ser sin estado, por lo que las solicitudes que ingresan a la aplicación a través de estas rutas están destinadas a ser autenticadas a través de tokens y no tendrán acceso al estado de la sesión.
El archivo channels.php
es donde puedes registrar todos los canales de broadcasting de eventos que tu aplicación admite.
El Directorio de Almacenamiento
El directorio storage
contiene tus registros, plantillas Blade compiladas, sesiones basadas en archivos, cachés de archivos y otros archivos generados por el framework. Este directorio se divide en directorios app
, framework
y logs
. El directorio app
puede usarse para almacenar cualquier archivo generado por tu aplicación. El directorio framework
se utiliza para almacenar archivos y cachés generados por el framework. Finalmente, el directorio logs
contiene los archivos de registro de tu aplicación.
El directorio storage/app/public
se puede utilizar para almacenar archivos generados por el usuario, como avatares de perfil, que deben ser de acceso público. Debes crear un enlace simbólico en public/storage
que apunte a este directorio. Puedes crear el enlace utilizando el comando Artisan php artisan storage:link
.
El Directorio de Pruebas
El directorio tests
contiene tus pruebas automatizadas. Se proporcionan ejemplos de pruebas unitarias y pruebas de características de Pest o PHPUnit desde el principio. Cada clase de prueba debe tener el sufijo Test
. Puedes ejecutar tus pruebas utilizando los comandos /vendor/bin/pest
o /vendor/bin/phpunit
. O, si deseas una representación más detallada y bonita de los resultados de tus pruebas, puedes ejecutar tus pruebas utilizando el comando Artisan php artisan test
.
El Directorio de Proveedores
El directorio vendor
contiene tus dependencias de Composer.
El Directorio de la Aplicación
La mayoría de tu aplicación se encuentra en el directorio app
. Por defecto, este directorio está en un espacio de nombres bajo App
y se carga automáticamente con Composer utilizando el estándar de autoloading PSR-4.
Por defecto, el directorio app
contiene los directorios Http
, Models
y Providers
. Sin embargo, con el tiempo, se generarán una variedad de otros directorios dentro del directorio app a medida que uses los comandos Artisan make para generar clases. Por ejemplo, el directorio app/Console
no existirá hasta que ejecutes el comando Artisan make:command
para generar una clase de comando.
Tanto los directorios Console
como Http
se explican más a fondo en sus respectivas secciones a continuación, pero piensa en los directorios Console
y Http
como proveedores de una API en el núcleo de tu aplicación. El protocolo HTTP y la CLI son ambos mecanismos para interactuar con tu aplicación, pero no contienen realmente la lógica de la aplicación. En otras palabras, son dos formas de emitir comandos a tu aplicación. El directorio Console
contiene todos tus comandos Artisan, mientras que el directorio Http
contiene tus controladores, middleware y solicitudes.
[!NOTA] Muchas de las clases en el directorio
app
pueden ser generadas por Artisan a través de comandos. Para revisar los comandos disponibles, ejecuta el comandophp artisan list make
en tu terminal.
El Directorio de Transmisión
El directorio Broadcasting
contiene todas las clases de canal de transmisión para tu aplicación. Estas clases se generan utilizando el comando make:channel
. Este directorio no existe por defecto, pero se creará para ti cuando crees tu primer canal. Para aprender más sobre los canales, consulta la documentación sobre transmisión de eventos.
El Directorio de la Consola
El directorio Console
contiene todos los comandos Artisan personalizados para tu aplicación. Estos comandos se pueden generar utilizando el comando make:command
.
El Directorio de Eventos
Este directorio no existe por defecto, pero será creado para ti por los comandos Artisan event:generate
y make:event
. El directorio Events
alberga clases de eventos. Los eventos pueden usarse para alertar a otras partes de tu aplicación que se ha producido una acción dada, proporcionando una gran flexibilidad y desacoplamiento.
El directorio de Excepciones
El directorio Exceptions
contiene todas las excepciones personalizadas para tu aplicación. Estas excepciones se pueden generar utilizando el comando make:exception
.
El Directorio Http
El directorio Http
contiene tus controladores, middleware y solicitudes de formulario. Casi toda la lógica para manejar las solicitudes que ingresan a tu aplicación se colocará en este directorio.
El Directorio de Trabajos
Este directorio no existe por defecto, pero se creará para ti si ejecutas el comando Artisan make:job
. El directorio Jobs
alberga los jobs encolables para tu aplicación. Los jobs pueden ser encolados por tu aplicación o ejecutarse de manera síncrona dentro del ciclo de vida de la solicitud actual. Se refiere a los jobs que se ejecutan de manera síncrona durante la solicitud actual como "comandos" ya que son una implementación del patrón de comando.
El Directorio de Listeners
Este directorio no existe por defecto, pero se creará para ti si ejecutas los comandos Artisan event:generate
o make:listener
. El directorio Listeners
contiene las clases que manejan tus eventos. Los oyentes de eventos reciben una instancia de evento y realizan lógica en respuesta a que se dispare el evento. Por ejemplo, un evento UserRegistered
podría ser manejado por un oyente SendWelcomeEmail
.
El Directorio de Correo
Este directorio no existe por defecto, pero se creará para ti si ejecutas el comando Artisan make:mail
. El directorio Mail
contiene todas tus clases que representan correos electrónicos enviados por tu aplicación. Los objetos Mail te permiten encapsular toda la lógica de construcción de un correo electrónico en una sola clase simple que se puede enviar utilizando el método Mail::send
.
El Directorio de Modelos
El directorio Models
contiene todas tus clases de modelo Eloquent. El ORM Eloquent incluido con Laravel proporciona una hermosa y simple implementación de ActiveRecord para trabajar con tu base de datos. Cada tabla de base de datos tiene un "Modelo" correspondiente que se utiliza para interactuar con esa tabla. Los modelos te permiten consultar datos en tus tablas, así como insertar nuevos registros en la tabla.
El Directorio de Notificaciones
Este directorio no existe por defecto, pero se creará para ti si ejecutas el comando Artisan make:notification
. El directorio Notifications
contiene todas las notificaciones "transaccionales" que envía tu aplicación, como notificaciones simples sobre eventos que ocurren dentro de tu aplicación. La función de notificaciones de Laravel abstrae el envío de notificaciones a través de una variedad de controladores como correo electrónico, Slack, SMS, o almacenadas en una base de datos.
El Directorio de Políticas
Este directorio no existe por defecto, pero se creará para ti si ejecutas el comando Artisan make:policy
. El directorio Policies
contiene las clases de política de autorización para tu aplicación. Las políticas se utilizan para determinar si un usuario puede realizar una acción dada contra un recurso.
El Directorio de Proveedores
El directorio Providers
contiene todos los proveedores de servicios para tu aplicación. Los proveedores de servicios inician tu aplicación vinculando servicios en el contenedor de servicios, registrando eventos o realizando cualquier otra tarea para preparar tu aplicación para las solicitudes entrantes.
En una nueva aplicación Laravel, este directorio ya contendrá el AppServiceProvider
. Puedes añadir tus propios proveedores a este directorio según sea necesario.
El Directorio de Reglas
Este directorio no existe por defecto, pero se creará para ti si ejecutas el comando Artisan make:rule
. El directorio Rules
contiene los objetos de regla de validación personalizados para tu aplicación. Las reglas se utilizan para encapsular lógica de validación complicada en un objeto simple. Para obtener más información, consulta la documentación de validación.