Sconto del 20% su tutti i corsi inserendo nel form il codice SPRING20 | Fino al 30 aprile
Sconto del 20% su tutti i corsi inserendo nel form il codice SPRING20 | Fino al 30 aprile

Guide per aspiranti programmatori

sviluppatrice in miniatura che programma in typescript con schermo in grande
Lezione 9 / 30

Struttura di un progetto Laravel

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 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

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

Pagamento rateale

Valore della rata: A PARTIRE DA 115 €/mese.

Esempio di finanziamento 

Importo finanziato: € 2440 in 24 rate da € 115 – TAN fisso 9,55% TAEG 12,57% – importo totale del credito € 2841.

Il costo totale del credito comprende: interessi calcolati al TAN indicato, oneri fiscali (imposta di bollo sul contratto 16,00 euro*) addebitati sulla prima rata, costo mensile di gestione pratica € 3,90, spesa di istruttoria € 0,00, spesa per invio rendicontazione periodica cartacea € 0,98 (o spesa per invio rendicontazione periodica cartacea € 0,00), imposta di bollo su rendicontazione periodica € 0,00. Modalità di rimborso obbligatoria: addebito diretto su c/c. La scadenza delle rate è determinata dal giorno della liquidazione del contratto; la data di scadenza delle rate è prevista il giorno 15 del mese. L’importo di ciascuna rata comprende una quota di capitale crescente e interessi decrescente secondo un piano di ammortamento “alla francese”. Offerta valida dal 01/01/2024 al 31/12/2024.

Messaggio pubblicitario con finalità promozionale. Per le informazioni precontrattuali richiedere sul punto vendita il documento “Informazioni europee di base sul credito ai consumatori” (SECCI) e copia del testo contrattuale. Salvo approvazione di Sella Personal Credit S.p.A. Aulab S.r.l. opera quale intermediario del credito NON in esclusiva.

*In fase di richiesta del finanziamento verrà proposta la facoltà di selezionare, in alternativa all’imposta di bollo sul contratto di 16,00 euro, l’imposta sostitutiva, pari allo 0,25% dell’importo finanziato.

Pagamento rateale

Valore della rata: A PARTIRE DA 210 €/mese.

Esempio di finanziamento  

Importo finanziato: € 4500 in 24 rate da € 210,03 – TAN fisso 9,68% TAEG 11,97% – importo totale del credito € 5146,55.

Il costo totale del credito comprende: interessi calcolati al TAN indicato, oneri fiscali (imposta di bollo sul contratto 16,00 euro*) addebitati sulla prima rata, costo mensile di gestione pratica € 3,90, spesa di istruttoria € 0,00, spesa per invio rendicontazione periodica cartacea € 0,98 (o spesa per invio rendicontazione periodica cartacea € 0,00), imposta di bollo su rendicontazione periodica € 0,00. Modalità di rimborso obbligatoria: addebito diretto su c/c. La scadenza delle rate è determinata dal giorno della liquidazione del contratto; la data di scadenza delle rate è prevista il giorno 15 del mese. L’importo di ciascuna rata comprende una quota di capitale crescente e interessi decrescente secondo un piano di ammortamento “alla francese”. Offerta valida dal 01/01/2024 al 31/12/2024.

Messaggio pubblicitario con finalità promozionale. Per le informazioni precontrattuali richiedere sul punto vendita il documento “Informazioni europee di base sul credito ai consumatori” (SECCI) e copia del testo contrattuale. Salvo approvazione di Sella Personal Credit S.p.A. Aulab S.r.l. opera quale intermediario del credito NON in esclusiva.

* In fase di richiesta del finanziamento verrà proposta la facoltà di selezionare, in alternativa all’imposta di bollo sul contratto di 16,00 euro, l’imposta sostitutiva, pari allo 0,25% dell’importo finanziato.

Contattaci senza impegno per informazioni sul corso

Scopriamo insieme se i nostri corsi fanno per te. Compila il form e aspetta la chiamata di uno dei nostri consulenti.