Table des matières

Pxxo_Widgets_Decorator_Controller

Ce widget permet de décorer un autre widget en déclenchant des actions dans la hiérarchie du widget qu'il décore.

Le widget est un décorateur, pour savoir comment l'utiliser, il faut donc se référer à la documentation des décorateurs, ou bien simplement se rendre dans la section des exemples plus bas.

Fonctionnement

Ce widget va analyser les URL en provenance du navigateur et il en déduira quelles actions de quelles classes doivent être déclenchées.

Pour rappel, avec Pxxo, on déclenche l'action d'une classe Pxxo avec des URL du type :

[ClassID] = [nom_d_une_méthode]

et ceci autant de fois que l'on souhaite déclencher d'actions simultanées. Exemple :

?Pxxo_Widget_Truc=defaut&Pxxo_Widget_Bidule=machin&a=1&b=2

Et bien la place, le Controller va permettre d'utiliser des URL du type :

/action1/action2/action3/[?a=1&b=2]

Pour réussir ce mapping, le controller utilise la règle suivante :

 
          ClassID = [préfix]Action1  
[préfix]Action1 = [préfix]Action2
[préfix]Action2 = [préfix]Action3

Cette syntaxe permet d'obtenir 2 types de fonctionnement :

Sur le widget décoré, les URL /truc/ et /bidule/, exécuteront respectivement la méthode {truc} ou la méthode {bidule}

En admettant que l'objet décoré possède des méthodes qui instancient des objets du même nom. Avec l' URL [/root]/truc/chouette/ on exécutera la méthode {chouette} de la classe [prefix]Truc instanciée par la méthode [prefix]Truc de la classe décorée.

Si on crée plusieurs classes avec un fonctionnement similaire, on peut obtenir un déclenchement récursif et hiérarchique d'objets.

Très compliqué d'approche, mais simple et puissant à l'usage.

Paramètres

Nom Valeur par défaut Description
equivalent - table de conversion entre un chemin dans l'URL et un nom de classe
prefix - un préfixe à ajouter au noms de classe déduit des répertoire fictifs
translator - callback prenant en entrée le chemin trouvé dans l'URL et qui renvoit en sortie un nouveau chemin

Mise en place du Controller

Pour rédiriger correctement les URLs fictives, on utilise le mod_rewrite d'Apache avec par exemple ce fichier .htaccess :


RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

On y associera le fichier index.php suivant :

 
require_once 'Pxxo/Config.php';
$config = new Pxxo_Config;
$config->path            = dirname(__FILE__).DIRECTORY_SEPARATOR;
$config->url_root        = dirname($_SERVER['PHP_SELF']); 
$config->class_path      = $config->path.'class';
$config->resources_path  = $config->path.'rsc';
$config->resources_url   = $config->url_root.'/rsc';
$config->session_flag    = true; 
$config->register();
 
require_once 'Application.php';
$o = new Application;
$o->addDecorator('Pxxo_Widgets_Decorator_Controller')
$o->main();
$o->dump();