Dopo alcuni articoli introduttivi sul framework Laravel, è arrivato il momento di mettere in pratica quanto appreso e concentrarsi sugli aspetti più tecnici. Questo e i prossimi articoli saranno divisi in due parti; nella prima introdurremo le varie funzionalità di Laravel mentre nella seconda arricchiremo passo passo la nostra applicazione.
Struttura di un progetto
Una volta creata la nostra applicazione con la metodologia che preferiamo (tramite installer o tramite composer come da primo articolo della guida), quello che ci si presenta è una struttura di folder abbastanza complessa per chi si avvicina per la prima volta a questo strumento. La struttura può sembrare parecchio dispersiva e ridondante, ma una volta appresi gli scopi di ciascuna cartella tutto sembrerà più sensato. La struttura di un progetto Laravel è la seguente:
Analizziamo più nel dettaglio le diverse cartelle:
Directory | Descrizione |
---|---|
app |
Rappresenta il cuore pulsante dell’applicazione, tutti i file che implementano la business logic verranno creati in questa cartella; all’interno della cartella verranno posizionati anche i vari model |
app/Console |
Contiene i comandi personalizzati che eseguiremo nella console |
app/Events |
Contiene eventuali eventi personalizzati che potremmo creare per far comunicare diversi componenti tra di loro |
app/Exceptions |
Contiene eventuali eccezioni custom utili |
app/Http |
Contiene tutta la logica Web dell’applicazione suddivisa in sottocomponenti |
app/Http/Controllers |
Contiene tutti controller |
app/Http/Middleware |
Contiene tutti i middleware e i filtri |
app/Http/Request |
Contiene tutti gli oggetti request definiti secondo lo standard PSR-7 |
app/Jobs |
Contiene tutti i queueable job dell’applicazione |
app/Listeners |
Contiene tutti le classi handler di eventi applicativi |
app/Providers |
Contiene tutti i Service Providers custom |
bootstrap |
Contiene i file principali per l’avvio di Laravel e una cartella cache per motivi di performance |
config |
Contiene tutte le configurazioni a livello applicativo |
database |
Contiene tutti i file relativi alla definizione del database |
database/factories |
Contiene le factory in grado di creare massivamente dei contenuti di test |
database/migrations |
Contiene le definizioni storicizzate della struttura del database |
database/seeds |
Contiene script per il popolamento delle tabelle |
public |
Rappresenta la document root del progetto e contiene tutte le risorse statiche pubbliche (JS, CSS, immagini, fonts…) |
resources |
Contiene file di logica ma non applicativi |
resources/assets |
Contiene eventuali assets pubblici da compilare (Less, Sass, CoffeeScript, TypeScript...) |
resources/lang |
Contiene i file per l'internazionalizzazione |
resources/views |
Contiene le viste PHP o blade |
storage |
Contiene file temporanei o cache |
storage/app |
Contiene file temporanei legati all’applicazione |
storage/framework |
Contiene file temporanei legati a Laravel |
storage/logs |
Contiene i log applicativi |
tests |
Contiene i file per i test automatici |
vendor |
Contiene, come da specifiche, tutte le dipendenze |
Nella root del progetto sono presenti alcuni file descrittori da utilizzare con git, composer, gulp, npm, phpunit, l’eseguibile artisan
e il file di configurazione dotenv
.
Le configurazioni di un progetto Laravel
La prima cartella che richiede la nostra attenzione, è config
. In questa directory sono presenti tutte le configurazioni dell’applicazione e di eventuali moduli aggiuntivi installati. I diversi contesti dell’applicazione sono configurati tramite file differenti in modo da offrire maggior manutenibilità: per esempio le configurazioni legate al database si troveranno in database.php
mentre quelle per l’invio delle email in mail.php
.
Spesso però alcune configurazioni possono differire tra i diversi ambienti; Laravel gestisce questa possibilità tramite la libreria DotEnv. Questa prevede la creazione di un file di configurazione .env
nella root del progetto. Tutti i settaggi presenti verranno caricati all’interno dell’array globale $_ENV
e grazie alla funzione env
di Laravel è possibile impostarli all’interno del framework.
Una configurazione particolare è l’applicationKey
. Questa permette di garantire un livello di sicurezza maggiore in quanto rappresenta la chiave di criptazione di sessioni e altri dati sensibili.
La regola generale quindi rimane quella di utilizzare DotEnv per quelle variabili che possono differire tra i diversi ambienti e di utilizzare direttamente i file nella cartella config
per le configurazioni che non possono variare.
E’ buona norma non condividere il file .env
con i vari membri del team o tramite git o svn. La miglior pratica è invece quella di mantenere un file .env.example
con una configurazione base ma lasciare al singolo sviluppatore l’onere di definire il proprio file. Per questo motivo il file .env
viene inserito di default dentro il file .gitignore
autogenerato da Laravel in fase di setup iniziale.
Creazione e configurazione del progetto Biblios
Una volta appresi i concetti teorici, iniziamo a lavorare sulla nostra applicazione denominata "Biblios". Tramite il comando:
composer create-project laravel/laravel biblios --prefer-dist
installiamo l’applicazione. Una volta scaricati i sorgenti grazie a composer dedichiamoci alla definizione dell’applicationKey tramite:
artisan key:generate
L’applicazione è ora pronta! Dal prossimo articolo ci addentreremo nei vari moduli del Framework. Ricordate di eseguire un composer update
e di creare un file .env
basandovi su .env.example
.