Version 1.0.0 - 2006/01/31

7.2 Les modèles ou contextes d’exécution

Jusqu’ici, vous n’avez pas beaucoup eu l’occasion, d’observer des lignes de code fonctionnelles d’une application Noas PHP. C’est parce que ce type de framework, elles se trouvent dans des classes bien particulières. En effet, Noas PHP est framework MVC2. Le contrôle des modèles et des vues s’effectue, par l’intermédiaire de la plate-forme, à l’aide des classes de votre environnement d’application. Le contrôle des mises à jour des vues et changement d’état du modèle est assuré par votre l’interface. Bien évidemment, elle n’est pas la seule à œuvrer. Les vues sont représentées par les templates et les modèles sont des classes très spéciales. Les modèles en Noas PHP conserve des informations propres à vos applications mais également des informations systèmes. Ils peuvent posséder des sous modèles et ainsi créer une hiérarchie de type père et fils. Précisons aussi que se sont eux qui gèrent le comportement de vos applications. C’est pour cette raison que lui donner le nom de modèle est un peu réducteur. Nous lui attribuerons dés maintenant le nom de contexte.
Il existe plusieurs sorte de contexte, pour les pages, les fenêtres popup, les listes, etc. Ils dérivent tous de la classe NoasDeviceContext. Vous aurez généralement besoin que d’un contexte par page, mais rien ne vous empêche de gérer des pages composés.
Le premier rôle d’un contexte est d’offrir à la template un contexte d’exécution. Il va lui servir dans un premier temps à afficher les données statiques et dynamiques. Un contexte est indispensable, c’est à dire que même s’il ne contient aucune information, une page doit toujours en posséder un.
Vous aurez tout le loisir d’observer la puissance de ces classes tout le long de cette partie.

Contexte de page simple

<?php
Noas::import("noas.web.context.NoasPageDeviceContext");
Noas::import("manager.businessobject.WoosInfo");

class ManagerConfigurationPage
                                                      extends NoasPageDeviceContext {
  private $info;
  function __construct() {
    parent::__construct("ManagerConfiguration.tpl"  
   ,"public/page/ManagerConfiguration".NOAS_PHP_EXTENSION);
   $this->setInvalidPage(
                 "public/page/ManagerHome".NOAS_PHP_EXTENSION); 
  }
  public function getInfo(){
    if(empty($this->info)){
      $this->info = new WoosInfo();
    }
    return $this->info;
  }
}
?>
Comme vous le constatez dans le listing précédant, un contexte de page doit posséder un template, une page d’accès et une page d’invalidité. La template représente la vue du contexte. Le chemin est donné relativement au répertoire de template de votre application. La page d’accès n’est pas une information redondante. Il peut arriver qu’à un certain niveau, la plate-forme à besoin d’afficher la page, mais ne dispose que de l’instance de contexte. La page d’invalidité, quant à elle, sera utilisée par la plate-forme en cas d’erreur ou d’invalidité de session. Ces pages sont données relativement au répertoire de l’application. Nous vous conseillons d’utiliser la constante NOAS_PHP_EXTENSION pour éviter les dépendances.
Généralement, pour des raisons d’efficacité, vous allez créer une classe abstraite générique pour vos applications. Cela vous donnera plus de souplesse lorsque vous voulez propager un comportement à toutes vos pages. Sachez que les contextes de popup fonctionne de manière similaire.

Contexte d'exécution générique

<?php
Noas::import("noas.web.context.NoasPageDeviceContext");
abstract class ManagerPageContext
                                                     extends NoasPageDeviceContext {
  function __construct($template, $page) {
    parent::__construct($template, $page);
    $this->setInvalidPage(
              "public/page/ManagerHome".NOAS_PHP_EXTENSION);
  }
}
?>

Listing 7.2.3: Contexte d'exécution type
<?php
Noas::import("manager.context.ManagerPageContext");
Noas::import("manager.businessobject.WoosInfo");
class ManagerConfigurationPage extends ManagerPageContext {
  private $info;
  function __construct() {
    parent::__construct("ManagerConfiguration.tpl"
   ,"public/page/ManagerConfiguration".NOAS_PHP_EXTENSION);
  }
  public function getInfo(){
    if(empty($this->info)){
      $this->info = new WoosInfo();
    }
    return $this->info;
  }
}
?>

 

© 2005 Réoka Djohou, tous droits réservés.