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 :
A 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 :
Des 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 : Voici 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 :
Le 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 :
Vous 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 :
Par bestmomo
Nombre de commentaires : 3