NANO-FRAMEWORK.COM

Framework PHP Objet UML

Navigation
HOWTO
Boîte à outils
Outils personnels
Action :

Introduction

Sommaire

Modèle - Vue - Contrôleur

Le mécanisme de fonctionnement de Nano repose sur le modèle MVC (Model-View-Controller) ce qui présente quelques avantages lorsque l'on veut faire une application web. Ce modèle impose une séparation entre les données, leur traitement et l'affichage, chacune des trois partie de ce modèle s'occupant respectivement d'une de ces tâches :

Bien-sûr, ces différentes parties sont capables de communiquer entre-elles suivant ce simple schéma :

modèle MVC

Lorsqu'un visiteur clique sur un lien ou soumet un formulaire, les informations sont envoyées au contrôleur qui peut alors effectuer le traitrement correspondant tout en ayant accès à la base de données grâce au modèle, ensuite, les informations résultantes de ce traitement sont envoyées à leur tour à la vue qui affichera le résultat sous la forme d'une page web la plupart du temps, on peut aussi imaginer que l'on puisse retourner autre chose que de l'html comme du XML, JSON, PDF... juste en changeant le fichier correspondant à la vue

Architecture d'une application

Les fichiers

Pour que tout cela puisse fonctionner correctement, une architecture est imposée, voici comment une application est organisée :

structure des répertoires

Les fichiers qui composent l'application sont placés dans le repertoire app : les actions dans controllers et les vues dans views. Il existe aussi un répertoire locale qui contiendra les fichiers utilisés pour faire une application multilingues mais nous verra ça plus tard.



Avant tout, il faut configurer Nano. Tous les fichiers de configuration sont regroupés dans le répertoire config, il y a déjà des fichiers par defaut qui son nommés <nom>.defaut.php, copiez les en enlevant le defaut et adaptez les à votre configuration. En général les noms des paramètres sont assez parlants pour savoir à quoi ils correspondent, si vous ne savez pas, ne changez pas.

Les actions

Lorsque vous essayez d'acceder à une page Nano décompose l'url et en extrait l'action à exécuter et en déduit la vue à afficher (si vous n'avez pas encore lu l'introduction, faites le maintenant)

Par exemple si vous voulez afficher la page : www.monsite.com/accueil/index Nano exécutera l'action index du contrôleur accueil à condition que le fichier app/controllers/accueil.php existe et qu'il contienne bien une classe héritée de Controller ayant une méthode index.

Il ne vous reste plus qu'a créer ce fichier :

  1. /**
  2. * Controleur accueil
  3. *
  4. * @package Controller
  5. * @author <votre nom>
  6. */
  7.  
  8. class AccueilController extends Controller
  9. {
  10. function __construct()
  11. {
  12. parent::__construct();
  13. $this->layout = 'layout';
  14. }
  15.  
  16. public function index()
  17. {
  18. }
  19. }

Vous pouvez placer dans la méthode index tout le traitement que vous souhaitez. De plus vous pouvez déclarer ici des propriétés qui seront accessibles plus tard depuis la vue assez simplement en faisant par exemple: $this->view->message = 'hello world';

Les vues

Vous avez sûrement remarqué la ligne avec le layout dans le constructeur du contrôleur, c'est juste qu'on dit au contrôleur que la vue utilisera un layout par defaut pour toutes les actions (cela dit, rien ne vous empèche de définir un layout spécifique dans chaque action en redéfinissant la propriété dans l'action correspondante)

IMAGE--

Créez le fichier layout.php dans app/views/layout, c'est un simple fichier html dans lequel Nano inserrera la vue :

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-FR" lang="fr-FR">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title><?php echo render_for_title(); ?></title>
  7. <?php echo render_for_meta(); ?>
  8. </head>
  9.  
  10. <body>
  11. <?php echo $content_for_layout; ?>
  12. </body>
  13. </html>

Le fichier correspondant à la vue sera inserré à la place de <?php echo $content_for_layout; ?>. Ce fichier est placé dans le répertoire app/views/<nom du contrôleur>/<nom de l'action>.php, dans notre cas : app/views/accueil/index.php

Récupérée de « http://wiki.nano-framework.com/index.php/Introduction »