Les vues permettent de séparer le fonctionnement de l’application avec le rendu final. Il est possible d’afficher les résultats directement depuis le model ou le controller mais celà est fortement déconseillé. Nous ne préservons plus la logique de séparation du modèle MVC.
Afin de mieux comprendre le bénéfice de l’architecture MVC nous allons dans un premier temps contrôller ce que nous allons disposer à l’écran par l’intermédiaire du contrôleur. Nous nous rendrons très vite compte que cette manière de faire est très difficile à maintenir.
Voici à quoi ressemblait notre contrôleur dans la partie précédente :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
<?php class Users extends MY_Controller { public function __construct() { parent::__construct(); } public function index() { $data = $this->Users_model->getAll(); var_dump($data); } // ... }
Nous avons tous nos utilisateurs avec leur profil dans un tableau que nous avons nommé $data. Pour extraire ces données nous utiliserons la boucle foreach.
1 2 3 4 5 6 7 8 9
function index() { $data = $this->Articles_model->getAll(); foreach ($data as $profil) { printf("<h1>%s</h1>\n", $profil->username); printf("<p>Lieu : %s, %s</p>\n", $profil->city, $profil->country); printf("<p>What's your favorite colour ? %s</p>\n", $profil->colours); } }
Le rendu est plutôt simple à agencer, mais le rendu est inacceptable, si nous devons avoir un header, un footer, peut-être une sidebar et ajouter des styles aux différents éléments, de plus qu’en adviendra-t-il lorsque nous aurons plusieurs rendu ?
L’exercice est plutôt périlleux, cependant vous pouvez toujours vous exercez…
C’est ici qu’intervient ce que nous nommons la vue. Dans le contrôleur nous devons spécifier un template ainsi que les données à envoyer.
Ceci se fait par l’intermédiaire de :
1
$this->load->view('nom du template sans extension', $data);
Notre méthode index() ressemblera alors à :
1 2 3 4
function index() { $data = $this->Users_model->getAll(); $this->load->view('home',$data) }
Si vous essayez maintenant de voir le rendu à l’aide de votre navigateur, vous devriez apercevoir une erreur. Ce qui est normal car nous savons ce que nous faisons (non ?). Rendons-nous dans le répertoire views pour créer la vue home.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<html> <head> <title>Les articles</title> </head> <body> <h1>Les articles du site</h1> <?php foreach ($data as $profil) { printf("<h1>%s</h1>\n", $profil->username); printf("<p>Lieu : %s, %s</p>\n", $profil->city, $profil->country); printf("<p>What's your favorite colour ? %s</p>\n", $profil->colours); } ?> </body> </html>
Cette fois nous avons créer, un fichier home.php ne contenant que la vue de notre application. Nous pouvons déjà apprécier le confort que peut apporter la séparation du model, du contrôleur et de la vue. Il est maintenant plus simple pour un designer d’opérer sur ce modèle, sans savoir ce qui se trame derrière.
CodeIgniter est fournie avec un parseur de base. Pour charger ce parseur, éditons le fichier application/config/autoload.php et ajoutons la librairie pour qu’elle se charge automatiquement.
L’avantage du parseur est que nous pouvons utiliser un langage spécifique à l’intérieur de notre template.
L’appel au sein de notre contrôleur se fera en remplaçant
1
$this->load->view('home',$data)
par
1
$this->parser->parse('home', $data);
Nous pouvons alors maintenant accéder à nos données sous la forme {data}.
1 2 3 4 5 6 7 8 9 10 11 12 13
<html> <head> <title>Liste des utilisateurs</title> </head> <body> <h1>Profil des utilisateurs</h1> {data} <h1>{username}</h1> <p>{city}, {country}</p> <p>{colours}</p> {/data} </body> </html>
{articles}...{/articles}
agit ici pour indiquer une boucle, tandis que {title}, {date} et {content} sont les éléments de notre objet.
L’utilisation d’un parseur n’est pas obligatoire. Elle dépend des envies et des attentes de chacun. Le parseur par défaut de CI n’offre pas beaucoup d’options et l’utilisation avancée d’un réel moteur de template vient à manquer rapidement. Smarty semble le candidat idéal, outre le fait de pouvoir manager simplement nos données facilement, il offre l’avantage de mixer les templates, choses assez compliqué à réaliser avec le moteur par défaut de codeigniter. De plus Smarty offre une panoplie d’outils pour aider à formater les données (majuscules, minuscules, échappement…) et une communauté assez forte.
Dans le prochain tutoriel nous intégrerons Smarty. Si vous ne le connaissez pas rendez-vous sur le site officiel.