Redirects

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
Lascia un commento

Lascia un commento

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