Estructura de directorios
Introducción
La estructura predeterminada de la aplicación Laravel está diseñada para proporcionar un excelente punto de partida tanto para aplicaciones grandes como pequeñas. Pero eres libre de organizar tu aplicación como desees. Laravel casi no impone restricciones sobre dónde se encuentra cualquier clase, siempre y cuando Composer pueda cargar automáticamente la clase.
¿Nuevo en Laravel? Consulta el Laravel Bootcamp para un recorrido práctico por el framework mientras te guiamos a través de la construcción de tu primera aplicación Laravel.
El Directorio Raíz
El Directorio App
El directorio app
contiene el código central 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 Bootstrap
El directorio bootstrap
contiene el archivo app.php
que arranca el framework. Este directorio también alberga un directorio de caché que contiene archivos generados por el framework para la optimización del rendimiento, como los archivos de caché de rutas y servicios.
El Directorio Config
El directorio config
, como su nombre lo indica, 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 Database
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 almacenar una base de datos SQLite.
El Directorio Public
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 activos como imágenes, JavaScript y CSS.
El Directorio Resources
El directorio resources
contiene tus vistas, así como tus activos sin compilar, como CSS o JavaScript.
El Directorio Routes
El directorio routes
contiene todas las definiciones de rutas para tu aplicación. Por defecto, Laravel incluye dos archivos de rutas: 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 todas tus rutas probablemente se definirán en el archivo web.php
.
El archivo console.php
es donde puedes definir todos tus comandos de consola basados en closures. Cada closure está vinculado a una instancia de 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 rutas adicionales para rutas de API (api.php
) y 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 destinadas a 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 mediante tokens y no tendrán acceso al estado de la sesión.
El archivo channels.php
es donde puedes registrar todos los canales de transmisión de eventos que tu aplicación admite.
El Directorio Storage
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 está segregado en los directorios app
, framework
y logs
. El directorio app
puede usarse para almacenar cualquier archivo generado por tu aplicación. El directorio framework
se usa 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
puede usarse para almacenar archivos generados por el usuario, como avatares de perfil, que deben ser accesibles públicamente. Debes crear un enlace simbólico en public/storage
que apunte a este directorio. Puedes crear el enlace usando el comando Artisan php artisan storage:link
.
El Directorio Tests
El directorio tests
contiene tus pruebas automatizadas. Ejemplos de pruebas unitarias y de características de Pest o PHPUnit se proporcionan de forma predeterminada. Cada clase de prueba debe tener el sufijo Test
. Puedes ejecutar tus pruebas usando los comandos /vendor/bin/pest
o /vendor/bin/phpunit
. O, si deseas una representación más detallada y hermosa de los resultados de tus pruebas, puedes ejecutar tus pruebas usando el comando Artisan php artisan test
.
El Directorio Vendor
El directorio vendor
contiene tus dependencias de Composer.
El Directorio App
La mayoría de tu aplicación se encuentra en el directorio app
. Por defecto, este directorio está en el espacio de nombres App
y se carga automáticamente por Composer usando el estándar de carga automática 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.
Ambos directorios, Console y Http, se explican más detalladamente en sus respectivas secciones a continuación, pero piensa en ellos como una API para el núcleo de tu aplicación. El protocolo HTTP y la CLI son mecanismos para interactuar con tu aplicación, pero no contienen 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.
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 comando php artisan list make
en tu terminal.
El Directorio Broadcasting
El directorio Broadcasting contiene todas las clases de canales de transmisión para tu aplicación. Estas clases se generan usando el comando make:channel
. Este directorio no existe por defecto, pero se creará cuando crees tu primer canal. Para aprender más sobre los canales, consulta la documentación sobre transmisión de eventos.
El Directorio Console
El directorio Console contiene todos los comandos Artisan personalizados para tu aplicación. Estos comandos pueden ser generados usando el comando make:command
.
El Directorio Events
Este directorio no existe por defecto, pero se creará mediante los comandos Artisan event:generate
y make:event
. El directorio Events alberga clases de eventos. Los eventos pueden ser usados para alertar a otras partes de tu aplicación de que una acción ha ocurrido, proporcionando una gran flexibilidad y desacoplamiento.
El Directorio Exceptions
El directorio Exceptions contiene todas las excepciones personalizadas para tu aplicación. Estas excepciones pueden ser generadas usando el comando make:exception
.
El Directorio Http
El directorio Http contiene tus controladores, middleware y solicitudes de formularios. Casi toda la lógica para manejar las solicitudes que ingresan a tu aplicación se colocará en este directorio.
El Directorio Jobs
Este directorio no existe por defecto, pero se creará si ejecutas el comando Artisan make:job
. El directorio Jobs alberga los trabajos en cola para tu aplicación. Los trabajos pueden ser encolados por tu aplicación o ejecutados de manera sincrónica dentro del ciclo de vida de la solicitud actual. Los trabajos que se ejecutan de manera sincrónica durante la solicitud actual a veces se denominan «comandos» ya que son una implementación del patrón de comando.
El Directorio Listeners
Este directorio no existe por defecto, pero se creará 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 el evento sea disparado. Por ejemplo, un evento UserRegistered
podría ser manejado por un oyente SendWelcomeEmail
.
El Directorio Mail
Este directorio no existe por defecto, pero se creará 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 de correo te permiten encapsular toda la lógica de construcción de un correo electrónico en una sola clase simple que puede ser enviada usando el método Mail::send
.
El Directorio Models
El directorio Models contiene todas tus clases de modelos 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 usa para interactuar con esa tabla. Los modelos te permiten consultar datos en tus tablas, así como insertar nuevos registros en la tabla.
El Directorio Notifications
Este directorio no existe por defecto, pero se creará si ejecutas el comando Artisan make:notification
. El directorio Notifications contiene todas las notificaciones «transaccionales» que son enviadas por tu aplicación, como notificaciones simples sobre eventos que ocurren dentro de tu aplicación. La característica de notificaciones de Laravel abstrae el envío de notificaciones sobre una variedad de controladores como correo electrónico, Slack, SMS o almacenadas en una base de datos.
El Directorio Policies
Este directorio no existe por defecto, pero se creará si ejecutas el comando Artisan make:policy
. El directorio Policies contiene las clases de políticas de autorización para tu aplicación. Las políticas se usan para determinar si un usuario puede realizar una acción dada contra un recurso.
El Directorio Providers
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 solicitudes entrantes.
En una aplicación Laravel nueva, este directorio ya contendrá el AppServiceProvider
. Eres libre de agregar tus propios proveedores a este directorio según sea necesario.
El Directorio Rules
Este directorio no existe por defecto, pero se creará si ejecutas el comando Artisan make:rule
. El directorio Rules contiene los objetos de reglas de validación personalizadas para tu aplicación. Las reglas se usan para encapsular lógica de validación complicada en un objeto simple. Para más información, consulta la documentación de validación.