Quando si crea un nuovo progetto con Laravel viene creata una directory al cui interno sono già disponibili tutti i file necessari per sfruttare fin da subito le potenzialità offerte da Laravel. Si tratta di un punto di partenza valido per applicativi di ogni dimensione ed esigenza, in cui ogni directory assolve a uno specifico compito legato al ciclo di vita dello sviluppo e dell’esecuzione dell’applicazione.
Trattandosi di un progetto Composer, ovviamente troveremo al suo interno il file composer.json nel quale sono elencati i pacchetti base di un applicativo Laravel.
Accanto ad esso, troviamo una serie di directory, ognuna delle quali assolverà al suo scopo.
Contenuto nuovo progetto Laravel
Contenuto della directory radice
Directory App in Laravel
La directory app contiene il codice base dell’applicazione. È la directory nella quale lavoreremo di più, poiché ospita tutte le classi PHP dell’applicazione. Vedremo poco oltre come queste classi sono organizzate al suo interno.
Directory Bootstrap in Laravel
La directory bootstrap contiene il file app.php che serve a fare il “bootstrap” (avvio) del framework quanto si fa partire l’applicazione. Al suo interno si trova la directory cache che Laravel usa per ottimizzare le performance. Salvo particolari esigenze, non è necessario modificare i file contenuti in bootstrap.
Directory Config in Laravel
La directory config contiene i file di configurazione dell’applicazione. Ogni file si occupa di un determinato gruppo di configurazioni (per esempio config/database.php conterrà le opzioni di configurazione del database, config/mail.php quelle del sistema di invio email). Notare che le varie opzioni sono indicate nella forma
‘driver’ => ‘pgsql’,
‘url’ => env(‘DATABASE_URL’),
‘host’ => env(‘DB_HOST’, ‘127.0.0.1’),
‘port’ => env(‘DB_PORT’, ‘5432’),
‘database’ => env(‘DB_DATABASE’, ‘forge’),
‘username’ => env(‘DB_USERNAME’, ‘forge’),
‘password’ => env(‘DB_PASSWORD’, ”),
che indica, ad esempio, che il valore dell’opzione username verrà ricavato dalla variabile ambientale DB_USERNAME; se tale variabile non è impostata, verrà usato come default forge. Questo meccanismo permette di usare le variabili ambientali per configurare in modo diverso l’applicazione a seconda dell’environment (sviluppo locale, staging, produzione, …)
Directory Database in Laravel
La directory database contiene migrazioni, factory model e seed per il database. Durante lo sviluppo sul proprio computer, è possibile usare questa directory per mantenere un database locale SQLite.
Directory Lang in Laravel
La directory lang ospita le traduzioni dell’applicazione nelle varie lingue supportate.
Directory Public in Laravel
La directory public contiene eventuali risorse “statiche” erogate dalla nostra applicazione web (asset quali immagini, JavaScript, CSS nella loro versione ottimizzata per essere inviata ai client) e soprattutto il file index.php.
Il file index.php è il punto d’ingresso di ogni richiesta HTTP che arriva al nostro applicativo web, che viene catturata e “instradata” alla classe che si occuperà di gestirla. Il file index.php carica anche l’autoloading.
Directory Resources in Laravel
La directory resources contiene le view (template di pagine HTML) e i file sorgente degli asset (che verranno ottimizzati da opportuni task e copiati in public).
Directory Routes in Laravel
La directory routes contiene le cosiddette rotte dell’applicazione. Le applicazioni Laravel includono diversi tipi di rotta, ognuno gestito da uno dei file inclusi in questa directory. Non tutti i gruppi sono necessari in tutte le applicazioni.
- routes/web.php: contiene le rotte del gruppo web, per le quali Laravel mette a disposizione sessione, protezione CSFR e cifratura dei cookie. Sono, in pratica, le rotte per gestire le chiamate e risorse come pagine web con form e simili.
- routes/api.php: contiene le rotte del gruppo api, ovvero le rotte per quelle risorse pensate per essere stateless. Sono in pratica le rotte per gestire delle API RESTful
- routes/console.php: contiene delle rotte particolari che servono a invocare dei comandi
- routes/channels.php: serve a registrare i canali di event broadcasting dell’applicazione
Directory Storage in Laravel
La directory storage contiene diverse tipologie di file generati automaticamente dal framework Laravel (log, cache, …). Al suo interno tali file sono “segregati” nelle sottodirectory app, framework e logs.
La directory storage/app/public, in particolare, può essere usata per salvare file creati dagli utenti dell’applicativo (per esempio foto di profilo caricate) che dovranno, poi, essere pubblicamente accessibili.
Directory Test in Laravel
La directory test contiene i test automatizzati. Laravel utilizza PHPUnit per gestire test unitari e feature.
Directory Vendor in Laravel
La directory vendor, come in ogni progetto Composer, contiene le dipendenze e il file autoload.php
Contenuto della directory App in Laravel
Nella directory app è contenuta la gran parte del codice e delle funzionalità specifiche di un progetto Laravel. In un progetto Laravel standard la directory app ospita le classi PHP del namespace App e ne viene fatto l’autoload tramite Composer.
All’interno della directory app ci sono diverse altre sottodirectory, che raggruppano le varie classi PHP necessarie all’applicazione in base alla tipologia di classe gestita da Laravel. Vedremo, più avanti in questa guida, il significato e l’utilizzo specifico di Model, Controller e altro. Per ora è sufficiente pensare che se dobbiamo aggiungere alla nostra applicazione Laravel una nuova pagina HTML e che quella pagina corrisponde a una certa URI, quasi sicuramente dovremo aggiungere una nuova classe della directory app/Http/Controllers che indicherà come comportarsi all’arrivo di una richiesta per la nuova risorsa.
Contenuto directory App
Vediamo alcune delle sottodirectory principali di app.
Directory App/Console in Laravel
La directory Console contiene comandi Artisan personalizzati della propria applicazione. Un esempio tipico è un comando che permette di aggiungere un nuovo utente alla nostra applicazione.
Directory App/Exceptions in Laravel
La directory Exceptions contiene gli handler di eccezioni dell’applicazione ed è anche la posizione consigliata per definire le eccezioni specifiche emesse dalla propria applicazione.
Directory App/Http in Laravel
La directory Http contiene tutte le classi e la logica necessaria a gestire le richieste (HTTP) che arrivano all’applicazione. Controller, middleware e form sono definiti in questa directory.
Directory App/Models in Laravel
La directory Model contiene le classi dei modelli Eloquent, la libreria ORM fornita di default con Laravel. Eloquent permette di interagire con i database in modo semplice: per ogni tabella presente sul database esiste un corrispettivo “modello” (Model) che viene usato per interagire con la tabella. Le classi model aggiunte in questa directory permettono di effettuare query, inserire, modificare e rimuovere entry nel database.
Comandi Artisan make in Laravel
Sebbene sia possibile aggiungere manualmente nuove classi PHP all’interno della directory app, può risultare più comodo affidarsi al comando Artisan make quando è necessario creare una nuova classe di un certo tipo.
La distinzione in varie directory nella directory app è anche legata alla classe ereditata dai singoli file. Supponiamo, ad esempio, di voler creare un nuovo Model per salvare sul database il contenuto di un form di contatto. Possiamo usare Artisan per creare questo nuovo modello.
php artisan make:model FormContact
viene creato un nuovo file app/Models/FormContact.php con il seguente contenuto
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class FormContact extends Model { use HasFactory; }
La classe per il nuovo modello, seppure vuoto, è già impostata per ereditare la classe Model di eloquent. In modo simile, altre classi create con artisan make possono avere già implementazioni di riferimento di funzioni necessarie alla classe che ereditano.
La lista di entità che è possibile creare sul proprio progetto con Artisan è disponibile eseguendo php artisan list make.
Altri file di progetto in Laravel
Oltre ai file necessari per gestire classi PHP e dipendenze Composer, nel template di un progetto Laravel sono anche disponibili da subito:
- file .gitignore configurato specificamente per progetti Laravel
- file package.json e vite.conf.js per gestire eventuali asset JavaScript e CSS
- file phpunit.xml per configurare l’esecuzione di PHPUnit
- file .evn e .env.example per definire le variabili ambientali usati dalla configurazione del progetto