Chapitre 44. Principe : développement en MVC
Le développement en MVC est un développement qui suit les concepts Modèle Vue Contrôle. Il en existe 2 versions. Ici, je ne parlerai que de la première.
En pratique, je crée 3 répertoires de base /html et /include et /include/template, le premier contient les « contrôles » le second les «vues» et le troisième les « modèles ».
44.1. Contrôle
Un contrôle est une page php, qui en fonction de l’action demandé va inclure la page «modèle» qu’il faut.
Dans noalyss, cette page est :
do.php pour toutes les demandes de pages
export.php pour toutes les impressions (PDF, CSV, …)
ajax_misc.php pour l’ajax.[1]
Exemple : la page contrôle contient
<?php
if ( !isset ($_REQUEST['do'])) exit();
$do=$_REQUEST['do'];
if ( $do == 'auteur' ) {
require_once('include/auteur.inc.php');
}
?>
L’explication est assez simple, si la page n’est pas appelée avec une variable do, donnée par un POST ou GET alors, le traitement s’arrête. Sinon en fonction de la valeur de la variable, il va inclure le fichier vue. Par habitude, mes fichiers vues ont toujours l’extension .inc.php.
Dans noalyss, le fichier do.php va chercher la vue à intégrer dans la base de données, ce qui améliore la sécurité mais aussi une grande souplesse pour les menus. Facile d’en ajouter, d’en retirer, de les renommer…
NOTE : Puisque le fichier à inclure est dans la base de données, si votre profil ne l’inclus pas, alors vous avez pas du tout accès à ce menu, cela s’étend aux impressions, il est possible d’empêcher les impressions. Les menus et profils se configurent dans [C1MENU]
44.2. Vue
Grâce à l’exemple vu dans Contrôle, vous avez compris ce qu’est le concept vue: c’est la présentation de votre action. Donc pour continuer l’exemple, dans le document include/auteur.inc.php, on aurait
<?php
require_once ('include/class_auteur.php');
if ( ! isset($_REQUEST['sdo']) ) exit();
$sdo=$_REQUEST['sdo'];
if ( $sdo == 'add' ) {
$auteur=new Auteur();
$auteur->display_form();
}
?>
Ici, comme dans contrôle, on vérifie qu’une action est bien demandée, si c’est la cas, on appelle un objet et on lui demande d’afficher quelque chose. Cet objet est ce qui est dans le concept MVC, un modèle. En fait, on dirait une espèce de sous-contrôle
44.3. Modèle
Eh oui, le dernier est donc le modèle. Ici ce sont deux classes, l’une va se charger de sauver, afficher, effacer les données et gère donc les relations avec la base de données et l’autre l’objet métier.
Le nom de ce fichier doit être
<nom de la classe>-<fonction>.php
Ce n’est pas toujours le cas, et cette réécriture se fait au fur et à mesure.
Maintenant que vous avez compris MVC, je vais développer un peu les modèles.
Cette partie est un peu plus complexe. Tout d’abord, personnellement, je la divise en deux parties, la première doit gérer les données de la base de données et l’autre les traiter. Comment y arriver ?
Il est vraiment fastidieux de construire une chaîne de caractère contenant tout le code html, surtout quand on emploie aussi du javascript et des tableaux. La solution que j’ai trouvé, je l’ai trouvé en m’inspirant de l’idée de smarty. En fait, je crée un sous-répertoire dans include que j’appelle template, et dedans je mets le code HTML de ce qui doit être affiché
function display_form() {
ob_start();
include 'template/auteur_display_form.php';
$r=ob_get_contents();
$ob_clean();
return $r;
}
exemple Ici on inclus le fichier, comme il est en php, il sera interprété par PHP, il contient surtout du code HTML et des balises PHP, on peut aussi manipuler la chaîne retournée avec les fonctions de chaînes comme str_replace, strcmp,… Ce qui donne à cette méthode encore plus de souplesse.
Il est important de respecter la règle suivante: un minimum d’HTML dans le php et un minimum de PHP dans l’HTML. Il faudra alors utiliser beaucoup de variables avant d’utiliser les templates, il faudra aussi résister à la tentation de mettre de l’html dans la variable, ce qui n’est pas toujours possible.
les variables sont définies en-dehors du fichier template. Les IDE averissent que ces variables ne sont définies. |