A tutti gli addetti ai lavori che usano Laravel sarà sicuramente capitato di dover fare un redirect e di passare delle variabili nella view che segue magari per fare apparire delle box con gli errori dopo la compilazione di una form. In Laravel è possibile fare questo in due modi:
- Ricaricare la view della form e passare delle variabili;
- Fare un redirect con la funzione redirect() e passare variabili ad un’altra view.
1. Ricaricare la view della form e passare delle variabili
Iniziamo con un esempio in cui facciamo in modo che, dopo la compilazione di una form, dobbiamo validare dei dati e restituire degli errori nella parte alta della form iniziale.
Lo so alcuni di voi mi diranno che Laravel ha già la classe Validator che provvede già a questo problema. Mettiamo caso, però, che abbiamo delle variabili errore personalizzate e vogliamo passarle alla view. Dobbiamo scrivere, quindi, il seguente codice:
if(empty($request->name)){
//alla fine del controller, trovando degli errori restituiamo questo
return view('users.create')->with(['users' => $users, 'error' => 'Attenzione il campo nome è vuoto!']);
}
In questo caso nella parte view di Blade, avremo il seguente codice (che è la stessa view della form da dove abbiamo trasmesso i dati per validarli):
@if(isset($error))
<div class="alert alert-danger">{{$error}}</div>
@endif
<form action="users" method="POST">
2. Fare un redirect con la funzione redirect() e passare variabili ad un’altra view
Dopo la validazione della form restituiremo un messaggio di conferma nella view finale, diversa da quella iniziale, dell’esito della validazione. Possiamo fare ciò nel modo seguente:
if(empty($request->name)){
//alla fine del controller, trovando degli errori restituiamo questo
return redirect('users/confirm')->with(['message' => 'Utente salvato!']);
}
@if(session('message'))
<div class="alert alert-danger">{{$message}}</div>
@endif
In questo caso con il metodo redirect() abbiniamo la funzione with() che memorizza le variabili passate come argomenti nella sessione: all’interno di Blade infatti, per ottenere i dati, dobbiamo usare il metodo session().