IronWoods.es

Desarrollo web

Estructura de directorios de Laravel

Hay muchos artículos publicados dedicados a la estructura de directorios de Laravel o que empiezan con ésta.

Conocer la estructura que trae el framework de base, y los cambios entre versiones, es fundamental.

Yo expondré, básicamente, de la que se va "creando" cuando añadimos "cosas" que Laravel nos provee pero que no tenemos en el momento de la instalación inicial. Cambios sobre la estructura común, que necesitamos para mantener ordenador un proyecto y para saber dónde encontrar las cosas en proyectos ajenos.

Estructura base

Según la documentación de Laravel 7, el directorio raíz, encontramos los siguientes:

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

Esta estructura es fija, en lo que a Laravel se refiere, yo añado un directorio "docs/" con esquemas y notas de la aplicación en desarrollo.

El directorio "app"

Este directorio junto con "routes" y "views" (según como enfoquemos el desarrollo) es el que más vamos a utilizar y "extender". Su árbol de directorios base de partida es:

  • Console
  • Exceptions
  • Http
  • Models*
  • Providers

De este bloque, se usarán mucho "Http" y "Models", seguidos por lo Providers, donde se van registrando las "ampliaciones" del framework base.

El grupo de directorios anterior, probablemente, lo extenderemos añadiendo los siguientes, por parte de Laravel:

  • Broadcasting
  • Events
  • Jobs
  • Listeners
  • Mail
  • Notifications
  • Observers
  • Policies
  • Rules
  • stubs
  • Views

Por parte de los desarrolladores, es más o menos "habitual" añadir, además:

  • Casts
  • Helpers
  • Repositories
  • Services
  • ...

"app/Models/" se eliminó con Laravel 5. Siendo una prática común añadirlo y ha vuelvo con Laravel 8.

El directorio "app/Http"

El directorio "app/Http" de Laravel contiene:

  • Controllers
  • Middleware

Por parte de Laravel es habitual añadir "Requests", para añadir clases que permiten descargar a los controladores de validar datos entrantes. También se puede añadir el directorio "Resources".

Nuevos directorios y artisan make

Los directorios que añade Laravel "automáticamente", dependen de que ejecutemos los comandos de artisan para crear sus respectivas clases. Podemos hacerlo manualmente, respectando la estructura propuesta.

Para ver en la terminal el listado de comandos artisan make disponibles ejecutar:

php artisan make --help

Para ver la ayuda sobre una opción determinada del comando:

php artisan make:nombreopcion --help
Comandos "artisan make:x" y los directorios extra que añaden

Listado para Laravel 6, 7 y 8.

  • make:cast ---> app/Casts/ (desde Laravel 7)
  • make:channel ---> app/Broadcasting/
  • make:command
  • make:component ---> app/Views/Components/ & resources/views/components/ (desde Laravel 7)
  • make:controller
  • make:event ---> app/Events/
  • make:exception
  • make:factory
  • make:job ---> app/Jobs/
  • make:listener ---> app/Listeners/
  • make:mail ---> app/Mail/
  • make:middleware
  • make:migration
  • make:model
  • make:notification
  • make:observer
  • make:policy ---> app/Policies/
  • make:provider
  • make:request ---> app/Http/Requests/
  • make:resource ---> app/Http/Resources/
  • make:rule ---> app/Rules
  • make:seeder
  • make:test

No existe un comando específico para crear ViewComposers, y aunque la documentación de Laravel sugiere crearlos en "app/Http/View/Composers", ya que contamos con "app/Views/" puede tener más sentido situarlos en "app/Views/Composers/".

Otros directorios

Laravel "crea" otros directorios en casos específicos.

Desde Laravel 7, si usamos el comando:

php artisan stub:publish

se crea el directorio "app/stubs/" con los ficheros que se usan como plantillas para crear las diferentes clases y ficheros mediante los comandos de artisan make. Modificando estos stubs, obtendremos ficheros con personalizaciones.

En Laravel 8, podemos "aplastar las migraciones" con:

php artisan schema:dump

que añade el directorio "database/schema/" y un fichero SQL con el contenido de las migraciones existentes.

Si hablamos de la paginación que trae Laravel, donde el template usado puede requerir cambios, podremos "exportarlo" de forma que esté disponible para su modificación, con el comando:

php artisan vendor:publish --tag=laravel-pagination

Se habrá creado el directorio "resources/views/vendor/pagination" con algunos templates que podemos modificar.

Conclusiones

Laravel parte de una estructura base, que se extenderá de acuerdo a las necesidades del proyecto. Nos provee, además, en muchos casos, de los directorios y clases apropiadas para ello a través de diversos comandos de artisan.