Laravel: introduzione al routing di laravel
Il routing in Laravel consente agli utenti di instradare tutte le richieste dell’applicazione al controller appropriato.
La maggior parte dei percorsi primari in Laravel riconosce e accetta un Uniform Asset Identifier insieme a una chiusura, fornendo un modo semplice ed espressivo di instradamento.
- Cos’è un laravel routing ?
- Cos’è un percorso (route) in Laravel ?
- I metodi per le route
- Come creare percorsi in Laravel
- Espressioni regolari come vincoli per i parametri di route
- Laravel Routing con funzione di controllo
- Assegnare un nome al percorso
- Route Groups
- Prefissi di Route Groups
- Middleware
- Prefissi del nome del percorso
- Letture Correlate
Tempo di lettura stimato: 8 minuti
Cos’è un laravel routing ?
Il percorso è un modo per creare un URL di richiesta per la tua applicazione. Questi URL non devono essere associati a file specifici su un sito Web e sono leggibili e ottimizzati per la SEO .
I route Laravel
vengono creati all’interno della cartella delle routes
. Vengono creati nel file web.php
per i siti web, e all’interno di api.php
per le API.
Queste laravel routes
vengono assegnate al gruppo middleware
di rete, evidenziando lo stato della sessione e la sicurezza CSRF
. Le rotte in route/api.php
sono senza stato e vengono assegnate al gruppo middleware
API.
L’installazione predefinita di Laravel viene fornita con due percorsi, uno per il Web e l’altro per l’API. Ecco come appare il percorso per il web in web.php
:
Route::get('/', function () {
return view('welcome');
});
Cos’è un percorso (route
) in Laravel ?
Tutti i percorsi di Laravel
, o laravel routing, sono definiti nei route files
che si trovano all’interno della directory routes
. L’applicazione di gestione delle rotte, definita nel file App\Providers\RouteServiceProvider
, si occupa di mettere in fila automaticamente questi file. Il file route/web.php
definisce i percorsi per la tua interfaccia web.
È possibile definire un percorso per una azione dei controllers
nel modo seguente:
Route::get(‘user/{id}’, ‘UserController@show’);
Route::resource
: il metodo Route::resource
produce tutti i percorsi di base richiesti per un’applicazione e viene gestito tramite la classe controller
.
Quando una richiesta corrisponde all’URI di route specificato, viene richiamato il metodo show
definito nel controller App\Http\UserController
, passando i parametri di route al metodo.
Per le risorse, devi fare due cose sull’applicazione Laravel. In primo luogo, è necessario creare un percorso di risorse su Laravel che fornisca percorsi di inserimento, aggiornamento, visualizzazione ed eliminazione. In secondo luogo, creare un controller di risorse che fornisca un metodo per l’inserimento, l’aggiornamento, la visualizzazione e l’eliminazione.
L’installazione predefinita di Laravel
viene fornita con due percorsi: uno per il Web e l’altro per l’API. Ecco come appare la route per web in web.php
:
Route::get(‘/’, function () {
return view(‘welcome’);
});
Laravel Middleware funge da ponte tra la request
e la response
. E’ uno strato applicativo che funge da filtro.
Laravel lavora con un middleware che ha il compito di confermare se l’applicazione del client è verificata o meno. Nel caso in cui il client sia confermato, allora il routing
reindirizza alla home page o a una pagina di accesso.
I metodi per le route
Il codice precedente definisce un percorso per la home page. Ogni volta che questo percorso riceve una richiesta get
per /
, restituirà la view
welcome
.
Tutti i Laravel routes
sono definiti nei tuoi file di routing
, che si trovano all’interno della directory dei routes
. Di conseguenza, l'/App/Providers/RouteServiceProvider
dell’applicazione mette in fila questi record. Il file route/web.php
contiene le rotte che sono gestite per la tua interfaccia web.
La struttura dei percorsi è molto semplice. Apri il file appropriato (`web.php
` o `api.php
` ) e inizia la riga di codice con `Route:: `
, seguito dalla richiesta che vuoi assegnare a quella rotta specifica e quindi specifica la funzione che sarà eseguiti a seguito della richiesta.
Laravel
offre i seguenti metodi di percorso:
get
post
put
delete
patch
options
I percorsi sono definiti in Laravel
all’interno della classe Route
con HTTP, il percorso a cui rispondere e la chiusura, oppure il controller.
Come creare percorsi in Laravel
Vediamo come puoi creare le rotte in Laravel, utilizzando i metodi http
.
Una Route GET di base
Ora creerò un percorso di base che stamperà la tabellina del 2.
Route::get('/table', function () {
for($i =1; $i <= 10 ; $i++){
echo "$i * 2 = ". $i*2 ."<br>";
}
});
Nel codice sopra, ho creato un percorso di richiesta GET per l’URL /table
, che stamperà la tabellina del 2 sullo schermo.
Vediamo ora lo stesso codice, parametrizzando il numero per il quale si vuole la tabellina:
Route::get('/table/{number}', function ($number) {
for($i =1; $i <= 10 ; $i++){
echo "$i * $number = ". $i* $number ."<br>";
}
});
Nel codice il ‘number
‘ tra le parentesi graffe rappresenta il parametro, cioè il numero per il quale verrà calcolata la tabellina. Ogni volta che viene specificato un URL del tipo /table/n
, allora verrà stampata la tabellina del numero n
.
Esiste anche il modo per combinare entrambe le funzionalità in un unico percorso. Laravel offre la funzionalità dei parametri opzionali che ti consente di aggiungere parametri opzionali utilizzando il punto interrogativo ‘?’ dopo il parametro facoltativo e il valore predefinito.
Vediamo l’esempio:
Route::get('/table/{number?}', function ($number = 2) {
for($i =1; $i <= 10 ; $i++){
echo "$i * $number = ". $i* $number ."<br>";
}
});
Nel codice sopra abbiamo creato il nostro parametro di route, rendendo il numero facoltativo, quindi se un utente instrada `/table
` allora genererà la tabella di 2 per impostazione predefinita e se un utente instrada a `/table/{number}
` quindi la tabellina del numero 'number'
verrà prodotto.
Una Route POST di base
Le rotte in Laravel
possono anche essere definite per rispondere ad altri metodi HTTP
, come POST
, PUT
e DELETE
. Ecco un esempio di definizione di percorso per una richiesta POST
:
Route::post('/users', 'UserController@store');
In questo esempio, il Route::post
metodo viene utilizzato per definire una route per il /users
percorso che risponde alle richieste POST. Quando viene effettuata una richiesta POST a questo percorso, verrà chiamato il store
metodo della classe per gestire la richiesta.UserController
Espressioni regolari come vincoli per i parametri di route
Nell'esempio precedente abbiamo creato un percorso per la generazione della tabellina, ma come possiamo assicurarci che il parametro del percorso sia effettivamente un numero, per evitare errori durante la generazione della tabellina ?
In Laravel
, puoi definire un vincolo al parametro della rotta usando il metodo `where
` sull’istanza della rotta. Il metodo `where
` accetta il nome del parametro e una espressione regolare per quel parametro.
Vediamo ora un esempio di vincolo per il nostro parametro `{numero}
` per assicurarci che solo un numero venga passato alla funzione.
Route:: get ( '/table/{numero?}' , funzione ( $numero = 2 ) {
for( $i = 1 ; $i < = 10 ; $i + + ) {
echo "$i * $numero = " . $i * $numero . "<br>" ;
}
} )->where( 'numero' , '[0-9]+' ) ;
Nel codice sopra, abbiamo usato un’espressione regolare per il numero del percorso. Ora, se un utente prova a eseguire il routing a /table/no , verrà visualizzata un’eccezione NotFoundHttpException
.
Laravel Routing con funzione di controllo
In Laravel, puoi definire un metodo Controller per un percorso. Un metodo controller esegue tutte le azioni definite ogni volta che un utente accede alla route.
Con il seguente codice stiamo assegnando il metodo controller 'functionname'
a una route:
Route:: get ( '/home' , 'YourController@functionname' ) ;
Il codice inizia con `Route::`
e quindi definisce il metodo di richiesta per il percorso. Successivamente, definisci il tuo percorso e il controller insieme al metodo aggiungendo il simbolo @ prima del nome del metodo.
Assegnare un nome al percorso
In Laravel
, puoi definire un nome per il tuo percorso (laravel routing). Questo nome è spesso molto utile. Ad esempio, se desideri reindirizzare un utente da un percorso a un altro, non è necessario definire l’URL di reindirizzamento completo. Puoi semplicemente dare il suo nome. Puoi definire il nome della rotta usando il metodo `name
` nell’istanza della rotta.
Route::get('/table/{number?}', function ($number = 2) {
for($i =1; $i <= 10 ; $i++){
echo "$i * $number = ". $i* $number ."<br>";
}
})->where('number', '[0-9]+')->name(‘table’);
Ora, potrei rigenerare l’URL per questo percorso, attraverso il seguente codice:
$url = route('table');
Allo stesso modo, per il reindirizzamento a questo URL, la sintassi corretta sarebbe:
return redirect()->route('table');
Route Groups
I Route Groups
, letteralmente gruppi di percorsi, è una funzionalità essenziale in Laravel, che consente di raggruppare i percorsi. I gruppi di percorsi sono utili quando si desidera applicare gli attributi a tutti i percorsi ragruppati. Se utilizzi i gruppi di percorsi, non devi applicare gli attributi individualmente a ciascun percorso; questo evita la duplicazione. Ti consente di condividere attributi come middleware
o namespaces
, senza definire questi attributi su ogni singolo percorso. Questi attributi condivisi possono essere passati in un formato array come primo parametro al metodo Route::group
.
Sintassi di un Route Group
Route::group([], callback);
dove [ ]: è un array passato al metodo group come primo parametro.
Esempio di Route Group
nel web.php
Route::group([], function()
{
Route::get('/first' , function()
{
echo "first way route" ;
});
Route::get('/second' , function()
{
echo "second way route" ;
});
Route::get('/third' , function()
{
echo "third way route" ;
});
});
Nel codice, definiamo il metodo group(), che contiene i due parametri, cioè array
e closure
. All’interno della closure
, possiamo definire quanti route
vogliamo. Nel codice sopra, abbiamo definito tre route
.
Se via browser accediamo all’URL localhost/myproject/first
allora interviene il primo route
scrivendo nel browser first way route
.
Con l’URL localhost/myproject/second
allora interviene il secondo route
scrivendo nel browser second way route
.
Mentre con l’URL localhost/myproject/third
allora interviene il terzo route
scrivendo nel browser third way route
.
Prefissi di Route Groups
I prefissi di route
vengono utilizzati quando vogliamo fornire una struttura URL comune a più route
.
Possiamo specificare il prefisso per tutti i percorsi definiti all’interno del gruppo utilizzando l’opzione matrice prefisso nel Route Groups
.
Esempio di web.php
Route::group(['prefix' => 'movie'], function()
{
Route::get('/godfather',function()
{
echo "Godfather casting";
});
Route::get('/pulpfiction',function()
{
echo "Pulp Fiction casting";
});
Route::get('/forrestgump',function()
{
echo "Forrest Gump casting";
});
});
Il codice contiene tre percorsi a cui è possibile accedere dai seguenti URL:
/movie/godfather ---> Godfather casting
/movie/pulpfiction ---> Pulp Fiction casting
/movie/forrestgump ---> Forrest Gump casting
Middleware
Possiamo anche assegnare il middleware a tutti i percorsi all’interno di un gruppo. Il middleware deve essere definito prima di creare il gruppo. Per vedere come fare, leggi il nostro articolo Laravel middleware come funziona.
Esempio:
Route::middleware(['age'])->group( function()
{
Route::get('/godfather',function()
{
echo "Godfather casting";
});
Route::get('/pulpfiction',function()
{
echo "Pulp Fiction casting";
});
Route::get('/forrestgump',function()
{
echo "Forrest Gump casting";
});
});
Prefissi del nome del percorso
Il metodo name
viene utilizzato per prefissare ogni nome di route
con una stringa specificata. Nel metodo name
, dobbiamo specificare la stringa con un carattere finale nel prefisso.
Esempio web.php
Route::name('movie.')->group(function()
{
Route::get('users', function()
{
return "movie.films";
})->name('films');
});
Letture Correlate
Ercole Palmeri