> Principes_de_base
fr en

Index
    - Objectifs
    - Un seul point d'entrée
    - Des modules
      - Forme des URL
        - Les 3 composantes essentielles
        - Et concrètement, où va t on ?
          - module = admin
          - group = log
          - action = show
      - Traitements de l'action
        - Affichage
        - Redirection
    - Voir aussi

Objectifs

Ce document a pour but de vous présenter dans les grandes lignes comment Copix organise votre application.

Un seul point d'entrée

Comme vous l'avez sans doute constaté, Copix utilise un seul point d'entrée pour vos applications: index.php.

Ce fichier est le seul et unique fichier PHP que vous devez laisser accessible à l'utilisateur (dans le répertoire de publication de votre serveur web). Les autres fichiers n'ont pas à être publiés, ils seront automatiquement inclus par Copix.

L'avantage de ce système est que vous n'avez pas à vous soucier de ce qui pourrait bien se passer si un utilisateur malveillant voulait inclure directement un fichier autre, car ils ne sont tout simplement pas accessibles !

Ce point d'entrée inclus un ensemble de fichiers de configuration (notamment copix.inc.php) et instancie le ProjectController qui aura la charge, via sa méthode "process", de lancer l'application.

A partir de ce moment, Copix prend le relais et route la demande vers les objets capables de la prendre en charge.

Des modules

Si on vulgarisait à l'extrême le rôle de Copix, on pourrait dire qu'il tente de faire fonctionner au mieux un ensemble de modules développés sur un modèle commun.

Ce que l'on appelle un module dans Copix, c'est un ensemble de fichiers (classes, templates, actions, ressources) qui ont pour objectif de constituer un ensemble fonctionnel (un forum, un blog, un gestionnaire de brèves, un moteur de recherche, ...).

Forme des URL

Lorsque l'on effectue une demande à Copix, on le fait via un navigateur web, et donc sous la forme d'une URL.

Copix est capable de fonctionner avec plusieurs modes d'url. En standard, copix fonctionne en mode "prepend" pour générer des formes de type index.php/module/groupe/action plutot que index.php?module=module&group=groupe&action=action

Vous découvrirez plus tard qu'il vous est possible de demander à Copix de générer les URL telles que bon vous semble, mais restons sur le cas standard.

Les 3 composantes essentielles

Lorsque vous demandez une URL de la forme "index.php/admin/log/show", voyons ce qui se passe.

Les URL dans Copix sont des demandes d'Action. Elles décrivent via un trigramme les éléments suivants :

Ces paramètres sont simplement indiqués dans l'ordre d'apparition, donc dans notre cas :

Si nous avions utilisé le mode "none" dans la gestion des url, elle aurait eu cette apparence : index.php?module=admin&group=log&action=show

Note : Copix dispose de plusieurs librairies pour créer / analyser les URL pour vous, ainsi vous développez des modules compatibles avec tous les modes d'url possibles.

Et concrètement, où va t on ?

Nous avons donc cette url "index.php/admin/log/show" et nous savons à quoi elle correspond.

Maintenant, voyons concrètement ce que Copix va exécuter.

module = admin

Cela veut dire que Copix ira chercher l'ensemble des ressources dans le module "admin". Nous avons dit plus haut que Copix était capable de faire fonctionner des modules. Ici nous choisissons donc de faire fonctionner le module "admin".

Ce module est livré dans project/modules/stable/standard/admin

Note : Il est possible de configurer plusieurs répertoires où Copix ira chercher les modules, c'est une option de configuration (arModules) paramétrable dans copix.conf.php.

group = log

Cela demande à Copix d'utiliser un objet "groupe d'actions" nommé ActionGroupLog. On fait référence à ces objets via la désignation "les ActionGroups"

Cet ActionGroupLog devra être situé dans le module "admin" (car la demande concerne le module admin).

Le fichier de cet ActionGroup sera situé au chemin admin/actiongroups/log.actiongroup.php.

Dans ce fichier, il existera une classe nommée ActionGroupLog qui devra déclarer un ensemble d'Actions prises en charge par ce objet.

Exemple de déclaration de ce fichier :


/**
* Cet objet prend en charge les demandes de type module=admin&group=log ou index.php/admin/log
*/

class ActionGroupLog extends CopixActionGroup {
   //...Contenu de l'objet
}
 
action = show

Le dernier paramètre "action" indique à Copix l'action à exécuter dans le groupe d'action log.

Les méthodes qui correspondent à des Actions dans les ActionGroup commencent par "process".

Ici, comme l'action demandée est "show" alors la méthode exécutée sera "processShow"

En résumé :


/**
* Cet objet prend en charge les demandes de type module=admin&group=log ou index.php/admin/log
*/

class ActionGroupLog extends CopixActionGroup {
   //Cette méthode intercepte index.php/admin/log/show
   public function processShow (){
      //contenu
   }
}
 

Traitements de l'action

Pour réaliser les traitements à faire dans votre action, vous avez complètement la main et faites en gros tout ce que vous voulez en PHP.

La seule contrainte sera, à la fin de vos traitements, d'indiquer à Copix la suite des opérations, à savoir pour 99% des cas : Affichage ou Redirection.

Affichage

Une demande d'affichage est effectuée via un code retour nommé PPO. PPO signifie "Plain PHP Object", donc un objet PHP tout ce qu'il y a de plus simple qui contiendra des données "prêtes" à être affichées.

Voyons un exemple où nous préparons des données prêtes à être affichées.


class ActionGroupLog extends CopixActionGroup {
   public function processShow (){
      //ici on peut effectuer tout un tas de traitements

      $ppo = new CopixPPO ();//création d'un objet PPO vide
      $ppo->monNom = 'Copix';//ajoute une donnée monNom destinée à être affichée
      return _arPpo ($ppo, 'template_interieur.tpl');//indique le code retour PPO
   }
}
 

et le template (situé dans templates/template_interieur.tpl)


<p>{$ppo->monNom} c'est trop bien !!</p>
 

Redirection


class ActionGroupLog extends CopixActionGroup {
   public function processShow (){
      //ici on peut effectuer tout un tas de traitements
      return _arRedirect ('http://www.copix.org');//ici on demande à rediriger sur copix.org
   }
}
 

Voir aussi