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.