CONTATTACI

Guide per aspiranti programmatori

Lezione 11 / 30

Route in Laravel

In Laravel una Route permette di configurare la nostra applicazione per rispondere quando viene effettuata una richiesta a una determinata URI. In questo modo, la nostra applicazione può rispondere a richieste di risorse che non devono essere necessariamente file specifici presente sul server. Ciò consente una grande flessibilità sotto molti punti di vista, non solo dal punto di vista della semplicità dello sviluppo, ma anche, ad esempio, per ottimizzazioni di tipo SEO.

La route più semplice che è possibile definire in Laravel è:

use Illuminate\Support\Facades\Route;

Route::get('/hello', function () {
    return 'Hello Laravel' 
});

Tale definizione è composta da:

  • il metodo statico della classe Route (genericamente legato al metodo HTTP della richiesta)
  • la stringa che rappresenta il path o parte del path della URI (/hello) della richiesta
  • una callback, ovvero closure (function () {…}) che definisce la risposta effettiva che verrà restituita

Come visto nella lezione precedente, queste definizioni di route vanno aggiunte al file routes/web.php per le richieste legate a pagine web. È importante ricordare, però, che l’ordine con cui le varie route vengono definite in questo file sarà determinare per il meccanismo di match: la prima route definita che può gestire la richiesta arrivata sarà quella che, effettivamente, restituirà la risposta, anche se dovesse esserne definita una più specifica più avanti nel file.

Infatti, per ogni richiesta ricevuta Laravel scansiona le rotte registrate fino a trovarne una che dichiara di poter gestire il metodo e il path della richiesta.

Route e metodi HTTP in Laravel

Le route più immediate che è possibile registrare in una applicazione Laravel indicano il metodo HTTP tramite il metodo statico di Route:

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

Sono disponibili altri metodi statici di Route di “raggruppare” più metodi HTTP, nel caso in cui si desideri rispondere nello stesso modo.

Route::match(['get', 'post'], '/', function () {
    // risposta comune per richieste GET e POST 
});

Route::any('/', function () {
    // risposta comune per **ogni** richiesta 
});

Nel caso sia necessario usare queste definizioni “con match”, è fondamentale ricordare che diventa importante l’ordine con cui sono state dichiarate le rotte per la stessa URI. Le rotte che fanno uso dei metodi get, post, put, patch, delete e options vanno definite prima di quelle con any e match, per essere sicuri che la richiesta sia gestita dalla route corretta.

Route di redirect in Laravel

Nel caso in cui si voglia effettuare una redirect per una determinata URI, è possibile definire una route con il metodo speciale redirect:

Route::redirect('/here', '/there');

La redirect così definita restituirà al client una risposta con codice HTTP 302. È possibile restituire un altro codice indicandolo come terzo parametro del metodo redirect:

Route::redirect('/here', '/there', 310);

È anche disponibile un metodo dedicato per le redirezione permanenti che restituisce il codice 301

Route::permanentRedirect('/here', '/there');

Route di fallback in Laravel

Il metodo Route::fallback permette di definire il comportamento dell’applicazione Laravel nel caso in cui non sia stata trovata alcuna rotta registrata per gestire una richiesta. Tipicamente, non è necessario definire una route di fallback, poiché le applicazioni Laravel sono inizialmente già configurate per restituire una pagina “404” nel caso in cui non si sia trovata una route per gestire la richiesta.

Route::fallback(function () {
    // no other route matched :( 
});

IMPORTANTE: nel caso in cui si registri una route di fallback, dovrà essere l’ultima riportata nel file route/web.php.

Rotte con “prefissi” in Laravel

Nel caso in cui dovessimo gestire delle URI con path come, per esempio, /user/profile e /user/orders, è possibile usare il metodo prefix per raggruppare insieme nel seguente modo:

Route::prefix('/user')->group(function () {
    Route::get('/profile', function () {
        // risposta per l'URI "/user/profile" 
    }); 
    Route::get('/orders', function () {
        // risposta per l'URI "/user/orders" URL 
    }); 
});

In questo modo, le route sono raggruppabili e bene organizzate in base all’effettivo path, semplificando la lettura del file route/web.php.

Ovviamente, lo stesso comportamento si sarebbe ottenuto senza usare prefix, ma indicando il path completo nelle due registrazioni:

Route::get('/user/profile', function () {
    // risposta per l'URI "/user/profile" 
}); 
Route::get('/user/orders', function () {
    // risposta per l'URI "/user/orders" URL 
});

Dependency injection in Laravel

Nel caso fosse necessario utilizzare una dipendenza esterna nella funzione di callback di una route, è possibile sfruttare la dependency injection messa a disposizione da Laravel.

Consideriamo il seguente esempio: vogliamo fare in modo che la risposta alla rotta /hello contenga il nome passato opzionalmente come query string alla URI. Cioè vogliamo che:

  • se il client richiede “GET /hello” la risposta sarà “Hello Laravel”
  • se il client richiede “GET /hello?name=Foo” la risposta sarà “Hello Foo”

Possiamo implementare questo comportamento nel seguente modo:

use Illuminate\Http\Request;

Route::get('/hello', function (Request $request) {
    $name = $request->query('name');
    if ($name == '') {
        $name = 'Laravel';
    }

return 'Hello $name';
});

In questo modo, la funzione associata alla route dichiara di avere una dipendenza aggiuntiva specificando un parametro con il type-hinting. Nel momento in cui la funzione verrà effettivamente eseguita, Laravel si occuperà anche di iniettare la richiesta arrivata come oggetto di tipo Illuminate\Http\Request.

Sarà, quindi, possibile usare tale oggetto all’interno del codice del metodo callback, per esempio per estrarre dettagli della richiesta necessari ad elaborare la risposta desiderata.

NOTA: le URI sono così strutturate: <scheme>://<host><path>[?<query>]. Quindi, la URI https://www.example.com/path/to/foo?param=value&option=none è composta dallo schema https, l’host www.example.com, il path /path/to/foo e la query param=value&option=none. Una URI ha sempre almeno un path (“/”), mentre la query è opzionale.

Cache delle route in Laravel

Durante lo sviluppo di un’applicazione Laravel, può capitare di registrare una nuova route mentre si sta eseguendo il server web locale con php artisan serve. In questa situazione, la rotta è subito disponibile, senza necessità di arrestare e riavviare il server web locale.

Nel momento in cui si effettua il deploy dell’applicazione in ambiente di produzione, è possibile avvantaggiarsi del meccanismo di cache di Laravel, che opera anche sulle rotte. In questo modo, specie nel caso di applicazioni con molte rotte registrate, Laravel prepara e usa una “build” ottimizzata del file route/web.php in modo da ridurre i tempi di caricamento e risoluzione. Tale cache può essere generata con:

php artisan route:cache

Una volta creata la cache, però, Laravel non userà più il contenuto del file route/web.php e, nel caso si aggiungano nuove rotte, sarà necessario aggiornare la cache eseguendo nuovamente il comando. Per rimuovere la cache è possibile usare:

php artisan route:clear

Contattaci senza impegno per informazioni sul corso

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.