Una vista è un template grafico utilizzato per renderizzare, ovvero mostrare a schermo, i dati processati dal controllore.
Nelle precedenti lezioni ci siamo occupati di definire una rotta e il rispettivo controllore; vedremo ora come visualizzare i dati attraverso un file di template.
In Symfony2 è possibile utilizzare PHP puro oppure Twig come template engine. In questa guida faremo uso di Twig data la sua semplicità di utilizzo, la perfetta integrazione con Symfony e, soprattutto, perché ci permette di separare la logica dalla presentazione.
Riprendendo la classe TestController
che abbiamo creato nella lezione precedente, andiamo ad aggiungere una nuova action e rispettiva rotta:
_test_view:
path: /test/view/{name}
defaults: { _controller: AcmeDemoBundle:Test:view }
requirements:
name: \w+
Avremo quindi la seguente Action:
public function viewAction( $name )
{
return $this->render('AcmeDemoBundle:Test:view.html.twig');
}
Dando un'occhiata al return del metodo, notiamo che esso restituise il metodo render
con una stringa come parametro. Il metodo render
restituisce a sua volta un oggetto Response
(ricordiamo che un controllore deve sempre restituire un oggetto di questo tipo) che contiene il codice HTML che visualizzeremo nella pagina. Questo codice è il risultato dell'interpretazione del file di template passato come stringa. Nel nostro caso esso va a cercare il file view.html.twig
contenuto all'interno della cartella src/Acme/DemoBundle/Resources/views/Test/
.
Se proviamo ad aprire il browser all'indirizzo /test/view/Simone
si solleverà un'eccezione dovuta alla mancanza del template AcmeDemoBundle:Test:view.html.twig
. Creiamo quindi il file ed inseriamo il seguente codice HTML:
<!DOCTYPE html>
<html>
<head></head>
<body>
<h1>Ciao!</h1>
</body>
</html>
Ricaricando ora la pagina noteremo che verrà visualizzata la stringa "Ciao!" contenuta all'interno di un tag <h1>
. Se guardiamo con attenzione la rotta e il controllore possiamo notare però che utilizziamo un parametro name
. Modificando lievemente la action e la view, possiamo fare in modo di visualizzare il parametro all'interno del nostro template.
Riapriamo la action e modifichiamola come nel seguente codice:
public function viewAction( $name )
{
return $this->render(
'AcmeDemoBundle:Test:view.html.twig',
array(
'name' => $name
)
);
}
Abbiamo aggiunto un array come parametro del metodo render
con cui possiamo passare dei parametri alla vista. In questo caso abbiamo passato un parametro name
.
Modifichiamo ora la view:
<!DOCTYPE html>
<html>
<head></head>
<body>
<h1>Ciao {{ name }}!</h1>
</body>
</html>
Abbiamo aggiunto il placeholder {{ name }}
tramite il quale Twig converte automaticamente con il corrispondente parametro. Ricaricando la pagina, ora, essa stamperà una stringa simile a "Ciao Simone!".
I valori che possiamo passare come parametri al template non sono solo stringhe ma Twig supporta anche interi, array e oggetti più complessi. Vediamo un esempio modificando la action come nel seguente esempio:
public function viewAction( $name )
{
$array = array(
'nome' => 'Simone',
'cognome' => 'Rossi'
);
$object = (object)$array;
return $this->render(
'AcmeDemoBundle:Test:view.html.twig',
array(
'name' => $name,
'my_int' => 10,
'my_array' => $array,
'my_object' => $object
)
);
}
Questo invece il codice della view:
<!DOCTYPE html>
<html>
<head></head>
<body>
<h1>Ciao {{ name }}!</h1>
<p>my int: <strong>{{ my_int }}</strong></p>
<p>my array: {{ dump(my_array) }}</p>
<p>my object: {{ dump(my_object) }}</p>
</body>
</html>
Come per la stringa, anche l'intero è stato visualizzato nella stessa maniera. Notiamo, invece, la presenza di una funzione dump()
. Questa funzione è un alias per richiamare la funzione var_dump()
di PHP. Per comodità e per non introdurre immediatamente i cicli, che vedremo nella lezione relativa a Twig, abbiamo utilizzato questa funzione per visualizzare il contenuto dell'array e dell'oggetto.
Ora che abbiamo compreso come renderizzare un controllore e come passare parametri alla vista, potremo dedicare la prossima lezione a Twig.