Generazione URL in Laravel

Il framework Laravel mette a disposizione una serie di helper functions per la generazione degli URL, molto versatili e complete, che risultano di grande aiuto laddove nasca l’esigenza di costruire dei link, delle API response o dei redirect ad altre parti dell’applicazione.

La prima helper function che presentiamo è url(),  vediamo l’uso mediante un banale esempio:

File routes/web.php

<?php

     Route::get('/generacodice/{seed}', function($seed){

        return $seed + 2000*30 + $seed%2;

     })->where(['seed' => '[0-9]+']);



    Route::get('/creacodice', function() {

             $url = url('/generacodice/10');

            return redirect($url);

    });

Per quanto banale, il codice precedente mostra come l’helper url() possa essere utilizzata per generare l’url associata alla route /genracodice/{seed}.

Nel codice mostrato sopra il valore della variabile $url sarà: http://laravelapp.loc/generacodice/10.

Se nella barra degli indirizzi del  browser si digita http://laravelapp.loc/creacodice,  verrà mostrato nella pagina il numero 60010.

Ulteriori utilizzi dell’helper url() sono:

url()->current();  // restituisce l'url corrente

url()->full();  // restituisce l'url corrente, compresa la querystring

url()->previous();  // restituisce l'url  della precedente request

Le funzionalità mostrate sopra possono essere ottenute, anche, utilizzando la facade URL:

es.
use IlluminateSupportFacadesURL
URL::current();


Generazione URL di routes con nomi

Se alla route della quale si vuole generare l’url, in fase di definizione, è stato assegnato un nome, allora ci viene in aiuto l’helper route()

Route::get(‘/quadrato/{numero}’, function ($numero) {

return $numero*$numero;

})->name(‘quadrato’);

Per generare l’url della route con nome quadrato, è sufficiente utilizzare il codice seguente:

$url = route(‘quadrato’ , [‘numero’ => 10]);

la variabile $url conterrà: http://laravelapp.loc/quadrato/10.

Signed URL

Laravel dà la possibilità di creare delle signed url associate a delle route con nome, in pratica si tratta di url  alle quali viene aggiunta una hash “signature”  alla querystring, che permette al framework di verificare che l’url non abbia subito alterazioni. Vediamo un esempio di come si possa utilizzare una signed url.

Supponiamo di voler generare una signed url relativa alla route con nome unsubscribe, ecco come fare:

use Illiminate\Support\Facades\URL;

$url = URL::signedRoute('unsubscribe', ['user' => 1]);

la variabile $url conterrà la stringa:

http://laravelapp.loc/unsubscribe/20?signature=b2fcb4595755d163b300f7a069a20e9dd363f828b8e81efc5db9eaa27e4e96a3

nel file Routes/web.php la route potrebbe essere la seguente:

Route::get('/unsubscribe/{user}', function (Request $request,$user) {
// azioni richieste
})->name('unsubscribe')->middleware('signed');

Come si evince dal codice sopra, la verifica dell’url viene demandata al middleware signed,  associato alla classe\Illuminate\Routing\Middleware\ValidateSignature, già registrato nel file kernel.php, con chiave signed all’interno della variabile protetta di tipo array $routeMiddleware.

ACTION URL

Una action url, rappresenta l’url associata ad un metodo presente all’interno di un controller.

La funzione helper che ci consente di creare url di questo tipo è action().

Di seguito un esempio di come generarla:

$url = action('nome-controller@nome-metodo',['parametro_1' => valore,'parametro_2' => valore....,'parametro_n' => valore]);

 

Articoli correlati

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *