Estructura de directorios en Laravel

Especial de estructura de Laravel

Comparte en

Conocer bien a Laravel va de la mano con conocer su estructura de directorios, conocer en detalle su estructura es ideal para un excelente punto de arranque y desde ya te puedo decir que se adapta a sistemas grandes y pequeños. La otra buena noticia es que su uso es opcional, si deseas la usas u organizas tu aplicación como quieras o te sientas mas cómodo.


Carpetas en Laravel

Carpetas en la raiz

  • app
  • bootstrap
  • config
  • database
  • public
  • resources
  • routes
  • storage
  • tests
  • vendor

Carpetas dentro de App

  • Console
  • Events
  • Exceptions
  • Http
  • Jobs
  • Listeners
  • Mail
  • Notifications
  • Policies
  • Providers
  • Rules

Breve inicio

En la documentación leí alguna vez lo siguiente "Laravel casi no impone restricciones sobre dónde se encuentra una clase determinada, siempre que Composer pueda autocargar la clase", en otras palabras, haz el cambio que desees y solo asegurate de que Composer cargue la clase... Con el pasar de los años he confirmado este dato. Laravel proporciona una estructura, pero si deseas puedes cambiarla y adaptarla según tu gusto y necesidad.

¿Dónde está el directorio de modelos?

¿Has oido de MVC?, seguramente si y te has preguntado ...y ¿mi carpeta models? jejeje, me hace chiste.

Muchos programadores se confundes porque no está la carpeta models o modelos. Pero no te preocupes, no existe de forma intencional. La razón es la siguiente, la palabra "modelo" significa varias cosas y para evitar confusion se decidió dejar estos archivos dentro de la carpeta app y tu puedes luego moverlos donde gustes o necesites, o dejarlos ahí.

Aclaración: La confusión radica en que para algunos la palabra "modelos" significa toda la lógica del sistema y para otros es la capa que hace uso de la base de datos.

Carpetas por defecto (están en la raiz)

  • La carpeta principal app: Es el centro de tu sistema; aquí absolutamente todo lo creado por ti.
  • Carpeta Bootstrap: Aquí verás el archivo app.php del framework y también una importante carpeta para la cache que contiene archivos generados por Laravel para la optimización del rendimiento, hablo de archivos de servicios y rutas.
  • config: Su nombre lo dice todo, contiene todos los archivos de configuración del proyecto, bases de datos, app, componentes externos, cache, emails, etc.
  • database: Contiene los archivos de migración y la configuración de datos semillas (datos falsos para llenar la base de datos). Ademas puedes usar esta carpeta para hacer uso de SQLite.
  • La carpeta public: Tiene dentro de si a nuestro index.php, que es el punto de entrada de todas las solicitudes. También encontrarás todo lo relacionado a imágenes, JS y CSS.
  • Carpeta de vistas: Se llama resources y contiene las vistas con extensión .blade y archivos sin compilar como LESS, SASS o JavaScript. Y por último los archivos de idiomas.
  • Zona de rutas: Tenemos a routes y contiene todas las definiciones de rutas del sistema. Está especificamente: web.php, api.php, console.php y channels.php.
    • web.php contiene rutas que RouteServiceProvider coloca con el middleware web, este proporciona estado de sesión, protección CSRF y cifrado de cookies. Si tu sistema no tiene configurado una API, entonces todas tus rutas estarán en este archivo.
    • api.php contiene rutas que RouteServiceProvider y usa el middleware api, y proporciona cosas interesantes como limitación de velocidad. Estas rutas están destinadas para ser externas, Laravel las llama apátridas, por lo que las solicitudes que ingresan a la aplicación a través de estas rutas están destinadas para ser autenticadas mediante tokens y no tendrán acceso al estado de la sesión, si conectarás un sistema externo te convendrá definir aquí tus rutas.
    • console.php es donde se definen los comandos de consola basados ​​en Closure. En otras palabras, es donde incluiremos las entradas o rutas basados en la consola.
    • channels.php se usa principalmente cuando en tu sistema usamos eventos, ahí registramos todos los canales de transmisión de eventos que admite nuestro sistema.
  • storage contiene las plantillas blade compiladas, sesiones basadas en archivos, cachés de archivos y otros archivos generados por Laravel. Guarda cualquier archivo generado y que Laravel puede usar como cache. También logs que lógicamente contiene registros del sistema. Dentro puedes encontrar la carpeta storage/app/public que puedes usar para almacenar todo lo generado por el usuario, como avatars y archivos que son de acceso público. NOTA: Hay que crear un acceso directo en public/storage que apunta a esta carpeta. Lo logras usando el comando php artisan storage:link.
  • tests es la carpeta de usuarios avanzados con grandes sueldos (espero ambas cosas te motiven) y contiene todas las pruebas automáticas.
  • vendor contiene todo lo descardato dese Composer.

Dentro de app

Tu sistema se encuentra en app. Esta carpeta es igual a tu namespace y Composer lo carga automáticamente usando el estándar de autocarga PSR-4.

Aquí encontrarás todo tu sistema segmentado en carpetas que conoceremos en el resto de este escrito. Algunas carpetas están desde el comienzo (por defecto) como app/Http y otras como app/Jobs se crean si las necesitas.

  • Console: Es una carpeta que contiene todos los comandos personalizados de Artisan, es decir, los que tu crees o personalices. Esto se genera usando php artisan make:command. Aquí también encontrarás al kernel del terminal, que es donde se definen todos los comandos personalizados y tareas programadas. El Directorio de Eventos
  • Eventos: Esta carpeta no la encontrarás creada, se genera al ejecutar el comanto php artisan event:generate y php artisan make:event. La carpeta se llama Events, y aquí encontrarás todas las clases de eventos.
  • Exceptions: Tiene dentro de si, el manejador de excepciones de nuestro sistema y también podemos configurar desde aquí cualquier excepción personalizada.
  • Http: Es nuestro día a día, tienes dentro los controladores, middleware y requests (solicitudes de formularios). Toda tu lógica para manejar las solicitudes irá en esta carpeta.
  • Jobs: Esta carpeta no existe por defecto, se creará al ejecutar el comando php artisan make:job. Estarán todos los jobs o trabajos en cola de nuestro sistema. Trabajar con esta carpeta es conocer cola trabajos (es un buen tema para una serie).
  • Listeners: Tampoco existe de forma predeterminada, y se crea con el comando php artisan event:generate o php artisan make:listener. Aquí tendremos todas las clases que manejan nuestros eventos. Ejemplo: Un evento SubscribedUser podría ser manejado por un Listeners llamado SendEmail.
  • Mail: Otra carpeta que por defecto no existe, se crea con el comando php artisan make:mail. Todo lo que represente un email deberá estar aquí guardado. Email de bienvenida, email de notificación, etc.
  • Notifications: No la tenemos creada por defecto, la creamos con el comando php artisan make:notification. Aquí tendremos todo lo que conocemos como notificación o anuncios resumidos que enviamos desde el sistema al usuario. Podemos notificar envíos de emails, Slack, SMS o guardados en base de datos (una notificación es un anuncion resumen).
  • Policies: Esta carpeta aparece al momento de ejecutar el comando php artisan make:policy. Esta carpeta contendrá las clases de autorización respecto al acceso de usuarios a un recurso.
  • Providers tiene dentro todos los ServiceProvider de nuestro sistema. Trae clases por defecto, pero podemos a partir de allí crear clases personalizadas.
  • Por último Rules: Una carpeta que no existe en una aplicación nueva, y para crearla usamos el comando php artisan make:rule. Aquí estarán todas las reglas de validación personalizadas.

Conocer está estructura, nos ayuda a tener mas claridad de Laravel. Tómate tu tiempo y revisa cada carpeta, solo observa.

Cómo puedes ver, cada carpeta merece una serie en video... Y eso tendrás en Rimorsoft Online

Comparte en

Creado por: Venezuela Italo Morales

CEO & Founder de Rimorsoft Online

Más información


Funciones Anónimas - Closures PHP

PHP 0 comentarios

Las funciones anónimas son funciones especiales ya que no tienen nombres. PHP dice que también son conocidas como cierres (closures), y aunque redunde hay que decir que permiten la creación de funciones que no tienen un nombre especificado. Esto, para que se entienda bien, podemos imaginar a una variable con necesidad de lógica. Como no tiene nombre, esta función anonima se le asigna a una variable.

Plataforma de pago Western Union

Desde Colombia, Chile y Perú principalmente me expresaron el problema que tenían con PayPal, y que habilitara Western Union para poder aprovechar la oferta.

Incluir en PHP (include, require, require_once)

PHP 0 comentarios

Yo solo enseño PHP, es un lenguaje que me ha dado de comer a mi y a los mios, espero le tengas mucho cariño como yo y formalices tu relación con este super lenguaje; de hecho quiero que tu próxima aplicación sea hecha en PHP. Saber PHP es aprender al mismo tiempo Laravel, no olvides este dato.

El archivo misterioso composer.lock

Composer 0 comentarios

composer.lock es conocido como el archivo misterioso que no deberíamos borrar. Vamos en este post a hablar sobre ese tema para cerrar el ciclo de la serie composer.