Prologo
Primi Passi
Architettura
Le Basi
- Routing
- Middleware
- Protezione da CSRF
- Controller
- Richieste
- Risposte
- Views
- Blade
- Vite
- URL
- Sessioni
- Validazione
- Errori
- Logging
Approfondimenti
- Artisan
- Broadcasting
- Cache
- Collezioni
- Concorrenza
- Contesto
- Contratti
- Eventi
- File System
- Helpers
- Client HTTP
- Localizzazione
- Notifiche
- Sviluppo di Package
- Processi
- Code
- Rate-limiting
- Stringhe
- Scheduling di Task
Sicurezza
Database
Eloquent ORM
Testing
Package
Redirects
- Creazione di Redirect
- Reindirizzare a Rotte Nominate
- Reindirizzare alle Azioni del Controller
- Reindirizzamento con Dati Flash della Sessione
Creazione di Redirect
Le risposte di redirect sono istanze della classe Illuminate\Http\RedirectResponse
e contengono gli header necessari per reindirizzare l’utente a un altro URL. Ci sono diversi modi per creare un’istanza di RedirectResponse
. Il metodo più semplice è usare l’helper globale redirect
:
Route::get('/dashboard', function () {
return redirect('/home/dashboard');
});
A volte potresti voler reindirizzare l’utente alla pagina precedente, come quando un modulo inviato non è valido. Puoi farlo usando la funzione helper globale back
. Poiché questa funzionalità utilizza la sessione, assicurati che la route che chiama la funzione back
utilizzi il gruppo middleware web
o abbia applicato tutti i middleware della sessione:
Route::post('/user/profile', function () {
// Validare la richiesta...
return back()->withInput();
});
Reindirizzare a Rotte Nominate
Quando chiami l’helper redirect
senza parametri, viene restituita un’istanza di Illuminate\Routing\Redirector
, che ti permette di chiamare qualsiasi metodo sull’istanza di Redirector
. Ad esempio, per generare un RedirectResponse
verso una rotta nominata, puoi usare il metodo route
:
return redirect()->route('login');
Se la tua rotta ha dei parametri, puoi passarli come secondo argomento al metodo route
:
// Per una rotta con il seguente URI: profile/{id}
return redirect()->route('profile', ['id' => 1]);
Per comodità, Laravel offre anche la funzione globale to_route
:
return to_route('profile', ['id' => 1]);
Popolazione dei Parametri tramite Modelli Eloquent
Se stai reindirizzando a una route con un parametro "ID" che viene popolato da un modello Eloquent, puoi passare il modello stesso. L’ID verrà estratto automaticamente:
// Per una route con il seguente URI: profile/{id}
return redirect()->route('profile', [$user]);
Se desideri personalizzare il valore che viene inserito nel parametro della route, dovresti sovrascrivere il metodo getRouteKey
nel tuo modello Eloquent:
/**
* Ottieni il valore della chiave della route del modello.
*/
public function getRouteKey(): mixed
{
return $this->slug;
}
Reindirizzare alle Azioni del Controller
Puoi anche creare reindirizzamenti verso azioni del controller. Per farlo, passa il controller e il nome dell’azione al metodo action
:
use App\Http\Controllers\HomeController;
return redirect()->action([HomeController::class, 'index']);
Se la route del tuo controller richiede dei parametri, puoi passarli come secondo argomento al metodo action
:
return redirect()->action(
[UserController::class, 'profile'], ['id' => 1]
);
Reindirizzamento con Dati Flash della Sessione
Redirigere a un nuovo URL e flashare dati nella sessione di solito avviene contemporaneamente. Tipicamente, ciò accade dopo aver completato con successo un’azione, quando flashi un messaggio di successo nella sessione. Per comodità, puoi creare un’istanza di RedirectResponse
e flashare i dati nella sessione in un’unica catena di metodi fluente:
Route::post('/user/profile', function () {
// Aggiorna il profilo dell'utente...
return redirect('/dashboard')->with('status', 'Profilo aggiornato!');
});
Puoi utilizzare il metodo withInput
fornito dall’istanza RedirectResponse
per flashare i dati di input della richiesta corrente nella sessione prima di reindirizzare l’utente a una nuova posizione. Una volta che l’input è stato flashato nella sessione, puoi facilmente recuperarlo durante la prossima richiesta:
return back()->withInput();
Dopo che l’utente è stato reindirizzato, puoi mostrare il messaggio flashato dalla sessione. Ad esempio, utilizzando la sintassi Blade:
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif