Vue PHP
1Présentation
La vue PHP permet d'utiliser des templates écrits en PHP pur.
Cette vue ne nécessite aucune bibliothèque externe. Les fichiers de template sont de simples fichiers PHP qui sont inclus au moment du rendu.
Les variables de template sont rendues disponibles sous forme de variables PHP directement accessibles dans les templates.
Pour utiliser cette vue, il faut la déclarer comme vue par défaut dans le fichier de configuration etc/temma.php :
<?php
return [
'application' => [
'defaultView' => '\Temma\Views\Php',
]
];
2Fichiers de template et inclusion
Les fichiers de template sont de simples fichiers PHP, qui contiennent du code HTML mélangé à des instructions PHP.
Vous pouvez segmenter vos pages en incluant d'autres fichiers PHP à l'aide des instructions
include ou require.
Par exemple, imaginons que vous ayez deux actions, list et show, qui affichent des pages
différentes en utilisant respectivement les fichiers list.php et show.php. Si ces deux
pages affichent le même en-tête de page, il vaut mieux le séparer pour ne pas avoir à le recopier dans
chaque page.
Vous pourriez ainsi avoir le fichier header.php, qui ressemblerait à ceci :
<html>
<head>
<title>Titre générique de page</title>
</head>
<body>
Nos deux templates de pages ressembleraient alors à ça :
<!-- fichier list.php -->
<?php include('header.php'); ?>
<h1>LISTE</h1>
</body>
<!-- fichier show.php -->
<?php include('header.php'); ?>
<h1>AFFICHAGE</h1>
</body>
3Variables
Les variables de template définies dans le contrôleur sont directement accessibles dans les templates
en tant que variables PHP.
Imaginons que le contrôleur contienne le code suivant :
$this['name'] = 'Anakin';
Vous pouvez afficher la valeur de la variable name dans votre template :
<?=$name?>
Ce qui aura pour effet d'afficher le texte suivant :
Anakin
4Listes
Imaginons que votre contrôleur définisse une variable de template qui contient une liste :
$this['fruits'] = [
'orange',
'banane',
'fraise',
];
Vous pouvez facilement afficher l'une des valeurs de la liste :
<?=$fruits[2]?>
Et vous obtiendrez :
fraise
5Tableaux associatifs et objets
Il est possible d'afficher le contenu d'un élément d'un tableau associatif à partir de sa clé, ou d'un attribut d'un objet à partir de son nom. Par exemple :
$this['colors'] = [
'red' => '#ff0000',
'green' => '#00ff00',
'blue' => '#0000ff',
];
Pour afficher une couleur, il suffit d'écrire :
<?=$colors['red']?>
Ce qui donnera :
#ff0000
6Conditions
Pour faire du traitement conditionnel, vous utilisez les instructions if / else du PHP.
Par exemple, si votre contrôleur définit une variable de template contenant les informations d'un utilisateur :
$user = $this->_dao->get($userId);
$this['user'] = $user;
Vous aurez ensuite la possibilité d'afficher un lien seulement si l'utilisateur est un administrateur :
<?php if ($user['roles']['admin']): ?>
<a href="/user/show/<?=$user['id']?>">Voir mon compte</a>
<?php endif; ?>
Ou :
<?php if ($user['roles']['admin']) { ?>
<a href="/user/show/<?=$user['id']?>">Voir mon compte</a>
<?php } ?>
7Boucles
Il arrive très fréquemment de devoir appliquer un traitement à un groupe d'éléments. Cela se présente habituellement
sous la forme d'une liste d'items récupérés de la base de données, que l'on souhaite afficher les uns après les autres.
Pour ce faire, vous utilisez l'instruction foreach du PHP.
Imaginons que le contrôleur récupère une liste d'utilisateurs depuis la base de données :
$users = $this->_dao->search();
$this['users'] = $users;
Il est très facile de boucler sur tous les utilisateurs pour afficher leur nom :
<ul>
<?php foreach ($users as $user): ?>
<li><?=$user['name']?></li>
<?php endforeach; ?>
</ul>
Ou :
<ul>
<?php foreach ($users as $user) { ?>
<li><?=$user['name']?></li>
<?php } ?>
</ul>
8Échappement
Contrairement à la vue Smarty, la vue PHP n'offre pas d'auto-échappement des variables. Si une variable contient des caractères spéciaux ("<", ">", "&" ...), il ne faut pas prendre le risque de l'écrire telle quelle dans le template, sous peine de générer un flux HTML non conforme ou une faille de sécurité XSS.
Pour échapper les caractères spéciaux, vous devez utiliser la fonction PHP htmlspecialchars() :
<!-- variable échappée -->
<?=htmlspecialchars($name)?>
<!-- variable non échappée (à utiliser uniquement si le contenu est sûr) -->
<?=$name?>
Il est recommandé d'échapper systématiquement toutes les variables affichées dans les templates, en utilisant par exemple une fonction utilitaire :
<?php
function e($value) {
return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}
?>
<p><?=e($name)?></p>
<p><?=e($email)?></p>