Blog / Laravel / Estructura de directorios
Todo framework y proyecto,
tienen una estructura de directorios que les es propia,
a veces las dos.
Para hablar de todo, además de la entrada actual,
sobre la estructura de directorios de Laravel,
he publicado otra con la
organización de directorios y ficheros de una aplicación web
básica con PHP.
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:
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:
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:
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.
Sitios consultados
12-11-2020 (actualizado 27-11-2020)
Entradas relacionadas: