Laravel 4 : chapitre 6 : Les vues

Nous avons bien avancé dans notre découverte de laravel4. Nous savons gérer les URL et les entrées. Mais pour les réponses nous nous sommes pour le moment contentés de choses sommaires. Nous allons voir à présent comment créer des réponses élaborées avec les vues.

Une vue simple

Il faut comprendre une vue dans le sens du modèle MVC. Pour respecter ce modèle une vue ne doit comporter que ce qui est nécessaire et suffisant pour afficher la réponse chez le client. Dans la structure de Laravel les vues doivent se placer dans le dossier app/views :

img20A la base une vue est juste du code HTML. Créez un fichier PHP avec ce code et enregistrez-le avec le nom bonjour.php dans le dossier app/views :

<h1>Bonjour !</h1>

Créez ensuite cette route :

Route::get('bonjour', function()
{
	return View::make('bonjour');
});

Entrez cette URL : http://localhost/laravel/public/bonjour

Vous devez obtenir cet affichage :

img21Des paramètres

Les vues seraient vraiment peu utiles si on ne pouvait pas leur transmettre de paramètre. Modifions notre vue pour lui ajouter une variable :

<h1>Bonjour <?php echo $nom ?>!</h1>

Il y a deux façons pour transmettre une variable, voyons la première avec cette route :

Route::get('bonjour/{nom}', function($nom)
{
    return View::make('bonjour', array('nom' => $nom));
});

Résultat avec l’URL http://localhost/laravel/public/bonjour/Alfred :

img22Voici une seconde syntaxe pour un résultat identique :

Route::get('bonjour/{nom}', function($nom)
{
	return View::make('bonjour')->with('nom', $nom);
});

Une sous-vue

On peut imbriquer une vue dans une autre. Voici par exemple une vue que nous allons appeler sous_vue.php :

<h3>Bonjour <?php echo $nom ?>!</h3>

Créons une deuxième vue que nous appelons bonjour.php :

<h1>Bienvenue !</h1>
<?php echo $enfant; ?>

Et enfin une route :

Route::get('bonjour/{nom}', function($nom)
{
	return View::make('bonjour')->nest('enfant', 'sous_vue', array('nom' => $nom));
});

Entrons l’URL http://localhost/laravel/public/bonjour/Albert

Nous obtenons :

img23Le composeur de vue

Imaginez maintenant que vous voulez lier des données à une vue chaque fois que vous la chargez. Évidemment vous pouvez écrire le code correspondant directement à chaque appel mais il existe une autre possibilité basée sur la gestion d’un événement. Voici un exemple pour en comprendre le fonctionnement. Commencez par créer une première vue que vous appelez header.php :

<h1>Bienvenue !</h1>

Créez une deuxième vue que vous appelez bonjour.php :

<?php echo $head; ?>
<h3>Bonjour <?php echo $nom ?>!</h3>

Dans le fichier des routes créez ce code :

View::composer('bonjour', function($view)
{
    $view->nest('head', 'header');
});

Route::get('bonjour/{nom}', function($nom)
{
    return View::make('bonjour')->with('nom', $nom);
});

Maintenant si vous utilisez l’URL http://localhost/laravel/public/bonjour/Jean vous obtenez :

img24Vous pouvez avec cette méthode aussi attacher des données systématiquement à une vue chaque fois que vous la chargez. Prenons un exemple avec la vue bonjour.php :

<h3><?php echo $greeting.' '.$nom ?>!</h3>

Avec ce code dans les routes :

View::composer('bonjour', function($view)
{
	$view->with('greeting', 'Bonjour');
});

Route::get('bonjour/{nom}', function($nom)
{
	return View::make('bonjour')->with('nom', $nom);
});

Maintenant si vous utilisez l’URL http://localhost/laravel/public/bonjour/Jean vous obtenez :

img06

3 réflexions sur “Laravel 4 : chapitre 6 : Les vues

  1. Bionik6 dit :

    Salut,

    D’abord bravo pour ce tuto sur L4, je trouve qu’il est très bien fait 🙂

    Juste une petite astuce pour envoyer des variables aux vues: on peut utiliser une fonction PHP assez mal-connus des développeurs, il s’agit de la fonction compact().

    Ca crée un tableau avec comme clé la valeur passé en argument à la fonction et comme valeur cette même valeur. Un exemple pour être plus précis.

    Route::get(‘bonjour/{nom}’, function($nom)
    {
    return View::make(‘bonjour’, compact(‘nom’));
    });

    équivaut exactement à

    Route::get(‘bonjour/{nom}’, function($nom)
    {
    return View::make(‘bonjour’, array(‘nom’ => $nom));
    });

    Je pense que c’est beaucoup plus propre avec la fonction compact() 🙂

    Encore une fois, félicitations pour ton tuto!

Laisser un commentaire