07 passare dati alle views
Vediamo come passare dei dati alle viste in modo che vengano visualizzati nella pagina.
Laravel ha 4 modi per passare i dati alle views, iniziamo col creare nella classe PageController un array che contiene dei dati statici fittizi, simulando dei dati ricevuti, magari da un db
class PageController extends Controller { protected $data = [ [ 'nome' => 'Pippo', 'cognome' => 'Paperino' ], [ 'nome' => 'Pluto', 'cognome' => 'Poldo' ], [ 'nome' => 'Olivia', 'cognome' => 'Bracciodiferro' ], ];
ora supponiamo di passare questi dati ad una views che si chiama staff, creiamola, nel file PagesController.php aggiungiamo
public function staff() { return view('staff'); }
in pages.php
Route::get('staff',[PageController::class, 'staff']);
e creiamo la vista in resources/views/staff.php
<h1>Staff</h1>
ora vediamo i 4 metodi per passare i dati alle views
1° modo
Passare dati come array nel secondo parametro della funzione view()
public function staff() { return view('staff', [ 'titolo'=>'Il nostro staff', 'staff'=> $this->data ]); }
abbiamo aggiunto il secondo parametro che prima non mettevamo. Infatti il metodo view() vuole come secondo parametro un array di dati, noi abbiamo passato un array associativo chiave => valore. Con la chiave staff abbiamo associato l’array $data[ ]
Adesso nella nostra vista recuperiamo i dati, iniziando recuperando il titolo con lo shortcode di php
<h1> <?=$titolo?> </h1>
Ora cicliamo l’array con un bel foreach, ma prima controlliamo che non sia vuoto
<h1> <?=$titolo?> </h1> <?php if(!empty($staff)) { echo '<ul>'; foreach ($staff as $persona) { echo "<li>{$persona['nome']} {$persona['cognome']}</li>"; } echo '</ul>'; }
2 modo
Nel metodo view() è presente a sua volta un altro metodo chiamato with()
return view('staff')->with('titolo','Il nostro staff')
Il metodo vuole come primo parametro la chiave e come secondo il dato.
Concateniamo con un altro metodo with() che recupera i valori dell’array $data[ ]
public function staff() { return view('staff') ->with('titolo','Il nostro staff') ->with('staff',$this->data ); }
Questo metodo è utile per passare pochi dati per non dover concatenare troppi with() e generare confusione nel codice.
3° modo
Possiamo concatenare il with() aggiungendo al il nome della proprietà, per convenzione con l’ iniziale maiuscola a with
->withNomeproprietà()
Questa tecnica si basa sui metodi magici di php, anche se il metodo witTitolo() non esiste, con un meccanismo laravel riesce ad assegnare il nome messo dopo come proprietà
public function staff() { return view('staff') ->withTitolo('Il nostro staff') ->withStaff($this->data); }
4° modo
L’ultimo metodo utilizza la funzione di php compact(), assegniamo i dati a delle variabili
public function staff() { $titolo = 'Il nostro staff'; $staff = $this->data; }
ora alla funzione view() assegniamo la solita vista staff e come secondo parametro la funzione compact() che avrà come argomenti le variabili contenenti i dati
public function staff() { $titolo = 'Il nostro staff'; $staff = $this->data; return view('staff', compact('titolo','staff')); }
anche questo è un modo carino per passare i dati, si può utilizzare indipendentemente quello che si preferisce, il primo con l’array rimane più ordinato, l’ultimo col compact() è ordinato anch’esso e utile se siete abituati ad usare variabili locali, il secondo e il terzo utili per passare dati al volo come delle stringhe.