# Introducción

La estructura de aplicación por defecto de Laravel tiene por objeto proporcionar un gran punto de partida para las aplicaciones grandes y pequeñas. Pero eres libre de organizar tu aplicación como quieras. Laravel no impone casi ninguna restricción en cuanto a la ubicación de una clase determinada, siempre y cuando el compositor pueda autocargar la clase.

# El directorio raiz

El directorio App

El directorio app directory contiene el código central de su aplicación. Exploraremos este directorio con más detalle pronto; sin embargo, casi todas las clases de tu aplicación estarán en este directorio.

El directorio Bootstrap

El directorio bootstrap contiene el archivo app.php, que inicia el marco. Este directorio también alberga un directorio de cache que contiene los archivos generados por el marco para la optimización del rendimiento, como los archivos de caché de rutas y servicios.

El directorio Config

El directorio config, como su nombre indica, contiene todos los archivos de configuración de su aplicación. Es una gran idea leer todos estos archivos y familiarizarse con todas las opciones disponibles.

El directorio Database

El directorio database contiene sus migraciones de bases de datos, fábricas de modelos y semillas. Si lo desea, también puede utilizar este directorio para mantener una base de datos SQLite.

The Public Directory

The public directory contains the index.php file, which is the entry point for all requests entering your application and configures autoloading. This directory also houses your assets such as images, JavaScript, and CSS.

El directorio Resources

El directorio resources contiene sus vistas así como sus activos crudos no compilados como LESS, SASS o JavaScript. Este directorio también alberga todos los archivos de tu idioma.

The Routes Directory

El diretorio routes contiene todas las definiciones de rutas para su aplicación. Por defecto, se incluyen varios archivos de rutas con Larave: web.php, api.php, console.phpchannels.php.

El archivo web.php contiene las rutas que el RouteServiceProvider coloca en el grupo de middleware web, que proporciona el estado de sesión, la protección CSRF y la encriptación de cookies. Si su aplicación no ofrece una API sin estado, RESTful, lo más probable es que todas sus rutas estén definidas en el archivo web.php.

El archivo api.php contiene las rutas que el RouteServiceProvider coloca en el grupo de middleware api, que proporciona la limitación de la tasa. Estas rutas están pensadas para ser apátridas, por lo que las solicitudes que entren en la aplicación a través de estas rutas están pensadas para ser autenticadas mediante tokens y no tendrán acceso al estado de sesión.

El archivo console.php es donde puede definir todos sus comandos de consola basados en el cierre. Cada Closure está ligado a una instancia de comando permitiendo un enfoque simple para interactuar con los métodos IO de cada comando. Aunque este archivo no define rutas HTTP, define puntos de entrada (rutas) basados en la consola en su aplicación.

El archivo channels.php es donde puede registrar todos los canales de difusión de eventos que su aplicación soporta.

El directorio Storage

El directorio storage contiene sus 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 utilizarse para almacenar cualquier archivo generado por tu aplicación. El directorio framework se utiliza para almacenar los archivos generados por el framework y los cachés. Por último, el directorio logs contiene los archivos de registro de su aplicación.

El directorio storage/app/public puede utilizarse para almacenar archivos generados por el usuario, como avatares de perfiles, que deben ser accesibles al público. Debería crear un enlace simbólico en public/storage que apunte a este directorio. Puedes crear el enlace usando el comando php artisan storage:link.

El directorio Testsy

El directorio tests contiene sus pruebas automatizadas. Un ejemplo de prueba PHPUnit se proporciona fuera de la caja. Cada clase de prueba debe ser sufijada con la palabra Test. Puede ejecutar sus pruebas usando los comandos phpunit o php vendor/bin/phpunit.

El directorio Vendor

El directorio vendor contiene las dependencias de Composer.

# El directorio App

La mayoría de su aplicación está alojada en el directorio app. Por defecto, este directorio se encuentra en App y es autocargado por Composer usando el estandar de autocarga PSR-4.

El directorio app contiene una variedad de directorios adicionales como Console, Http, y Providers. Piense en los directorios Console y Http como si proporcionaran una API en el núcleo de su aplicación. TEl protocolo HTTP y la CLI son mecanismos para interactuar con su aplicación, pero en realidad no contienen la lógica de la aplicación. En otras palabras, son dos formas de emitir comandos a su aplicación. El directorio Console contiene todos los comandos Artisan, mientras que el directorio Http contiene los controladores, el middleware y las solicitudes.

Se generarán otros directorios dentro del directorio app a medida que uses los comandos make Artisan para generar clases. Así, por ejemplo, el directorio app/Jobs no existirá hasta que ejecutes el comando make:job Artisan para generar una clase de trabajo.

Muchas de las clases del 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 su terminal.

El directorio Broadcasting

El directorio Broadcasting contiene todas las clases de canales de radiodifusión para su aplicación. Estas clases se generan mediante el comando make:channel. Este directorio no existe de forma predeterminada, pero se creará para usted cuando cree su primer canal. Para obtener más información sobre los canales, consulta la documentación sobre event broadcasting.

El directorio Console

El directorio Console contiene todos los comandos personalizados de Artisan para su aplicación. Estos comandos pueden ser generados usando el comando make:command. Este directorio también alberga el núcleo de la consola, que es donde se registran los comandos Artisan personalizados y se definen las scheduled tasks (tareas programadas).

El directorio Events

Este directorio no existe por defecto, pero será creado para ti por los comandos Artisan event:generate y make:event. El directorio Events alberga las classe de eventos. Los eventos pueden ser usados para alertar a otras partes de su aplicación de que una acción determinada ha ocurrido, proporcionando una gran flexibilidad y desacoplamiento.

El directorio Exceptions

El directorio Exceptions contiene el manejador de excepciones de su aplicación y también es un buen lugar para colocar cualquier excepción lanzada por su aplicación. Si desea personalizar la forma en que se registran o se muestran sus excepciones, debe modificar la clase Handler en este directorio.

El directorio Http

El directorio Http contiene sus controladores, middleware y solicitudes de formularios. Casi toda la lógica para manejar las peticiones que entren en su aplicación se colocará en este directorio.

El directorio Jobs

Este directorio no existe por defecto, pero se creará para ti si ejecutas el comando Artisan make:job. El directorio Jobs. El directorio Jobs alberga queueable jobs para su aplicación. Los trabajos pueden ser puestos en cola por su solicitud o ejecutados de forma sincronizada dentro del ciclo de vida de la solicitud actual. Los trabajos que se ejecutan de forma sincronizada durante la solicitud actual se denominan a veces "comandos", ya que son una implementación del patron de comandos.

El directorio 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 una lógica en respuesta al evento que se está disparando. Por ejemplo, un evento de UserRegistered puede ser manejado por un oyente de SendWelcomeEmail.

El directorio Mail

Este directorio no existe por defecto, pero se creará para ti si ejecutas el comando Artisan make:mail. El directorio Mail contiene todas sus clases que representan los correos electrónicos enviados por su aplicación. Los objetos Mail le permiten encapsular toda la lógica de construcción de un correo electrónico en una única y simple clase que puede ser enviada usando el método Mail::send

El directorio Models

El directorio Models contiene todas sus clases de modelos elocuentes. El ORM Elocuente incluido en Laravel proporciona una hermosa y simple implementación de ActiveRecord para trabajar con su base de datos. Cada tabla de la base de datos tiene un "Modelo" correspondiente que se utiliza para interactuar con esa tabla. Los modelos le permiten consultar los datos de sus tablas, así como insertar nuevos registros en la tabla.

El directorio Notifications

Este directorio no existe por defecto, pero se creará para usted si ejecuta el comando Artisan make:notification. El directorio Notifications contiene todas las notificaciones "transaccionales" que son enviadas por su aplicación, como simples notificaciones sobre eventos que ocurren dentro de su aplicación. La notificación de Laravel incluye resúmenes de envío de notificaciones a través de una variedad de controladores como el correo electrónico, Slack, SMS, o almacenados en una base de datos.

El directorio Policies

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íticas de autorización para su aplicación. Las políticas se utilizan para determinar si un usuario puede realizar una acción determinada contra un recurso. Para obtener más información, consulte la documentation de autorización.

El directorio Providers

El directorio Providers contiene todos los proveedores de servicio para su aplicación. Los proveedores de servicios inician su solicitud vinculando los servicios en el contenedor de servicios, registrando eventos o realizando cualquier otra tarea para preparar su solicitud para las solicitudes entrantes.

En una nueva aplicación de Laravel, este directorio ya contendrá varios proveedores. Eres libre de añadir tus propios proveedores a este directorio según sea necesario.

El directorio Rules

Este directorio no existe por defecto, pero se creará para ti si ejecutas el comando Artisan make:rule. El directorio Rules El directorio Rules contiene los objetos de reglas de validación personalizados para su aplicación. Las reglas se utilizan para encapsular la lógica de validación complicada en un objeto simple. Para obtener más información, consulte la documentación de validación.