IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Zendex - Documentation (fr)

Date de publication : 13/02/2008


I. Zendex_Bootstrap
I-A. Introduction
I-B. Zendex_Bootstrap_Dispatcher
I-B-1. Introduction
I-B-2. Le dispatcher Zend
I-B-2-a. Configurer Zend_Loader
I-B-2-b. Configurer Zend_Version
I-B-2-b-1. L'attribut version de la balise <Zend>
I-B-2-c. Configurer Zend_Cache
I-B-2-c-1. Les attributs de la balise <Zend><Cache><Add>
I-B-2-c-2. Exemple d'utilisation
I-B-2-d. Configurer Zend_Config
I-B-2-d-1. Les attributs de la balise <Zend><Config><File>
I-B-2-d-2. Exemple d'utilisation
I-B-2-e. Configurer Zend_Db
I-B-2-e-1. Les attributs de la balise <Zend><Db><Adapter>
I-B-2-e-2. Les attributs de la balise <Zend><Db><Table><setDefaultAdapter>
I-B-2-e-3. Les attributs de la balise <Zend><Db><Table><setDefaultMetadataCache>
I-B-2-e-4. Exemple d'utilisation
I-B-2-f. Configurer Zend_Controller
I-A-2-f-1. Configurer Zend_Controller_Front
I-B-2-f-2. Configurer Zend_Controller_Action
I-B-2-f-3. Configurer Zend_Controller_Router
I-B-3. Le dispatcher IncludePath
I-B-3-a. Les attributs
I-B-3-b. Exemple d'utilisation
I-B-4. Créer un dispatcher
I-B-4-a. Théorie de base
I-B-4-b. Squelette de classe
I-C. Zendex_Bootstrap_Plugin
I-C-1. Introduction
I-C-2. Le plugin Xpath
I-B-2-A. La fonction $XPATH.XML{}
I-C-2-B. La fonction $XPATH.IN{}
I-C-2-C. Exemple d'utilisation
I-C-3. Créer un plugin
I-C-3-a. Squelette d'un plugin


I. Zendex_Bootstrap


I-A. Introduction

Le package Bootstrap vous permet de configurer le bootstrap de votre application par l'intermédiaire d'un fichier de configuration XML.
L'objectif principal est de pouvoir étendre au maximum le parsing du fichier XML.
Vous pouvez ainsi utiliser Zendex_Bootstrap pour vos propres classes ou fonctionnalités.
Zendex_Bootstrap peut être utilisé sans le Zend Framework, en effet seul le dispatcher Zend nécessite le Zend Framework pour être utilisé.
Zendex_Boostrap nécessite l'extension SimpleXML activée.


I-B. Zendex_Bootstrap_Dispatcher


I-B-1. Introduction

Dans Zendex_Bootstrap, un dispatcher sert à représenter un balisage XML précis sous forme de classes et méthodes.
Dans un premier temps, voici un exemple simple de configuration XML avec un dispatcher que nous allons appeler 'MyClass' :
Fichier bootstrap.xml

<?xml version="1.0"?>
<Bootstrap>
    // Chargement du dispatcher
    <LoadDispatcher className="MyClass" />

    // Configuration du dispatcher
    <MyClass>
        <Method>
            <Argument>
            	<Param>One parameter</Param>
            	<Param>Two parameters</Param>
            </Argument>
        </Method>
    </MyClass>
</Bootstrap>
Ici, le dispatcher 'MyClass' est représenté par la classe Zendex_Bootstrap_Dispatcher_MyClass.
Le noeud parent (ici MyClass) représente la racine, donc notre classe.
Chaque noeud enfant correspond à une méthode de la classe MyClass qui est appelée lors du parsing.
Ces méthodes reçoivent chacune un seul argument SimpleXMLElement $xml correspondant à l'élément XML courrant.
Dans chaque méthode, vous avez le choix. Vous pouvez effectuer directement une action avec le xml récupéré, ou continuer le dispatch :

<?php
$this->_dispatch($xml);
Rendez-vous dans la dernière section pour savoir comment créer un dispatcher.
Fichier Zendex/Bootstrap/Dispatcher/MyClass.php

<?php
class Zendex_Bootstrap_Dispatcher_MyClass extends Zendex_Bootstrap_Dispatcher_Abstract
{
    public function MyClass($xml) 
    {
        // Ici on lance le parcours du noeud xml <MyClass>
        $this->_dispatch($xml);
    }

    public function Method($xml) 
    {
        // Ici nous disons au dispatcher de chercher les méthodes commençant par $prefix
        $prefix = 'Method_';
    	
        // Ici on lance le parcours du noeud xml <MyClass><Method>
        $this->_dispatch($xml, $prefix);
    }
    
    public function Method_Argument($xml) 
    {
        // Ici on fait une boucle sur la balise <Argument><Param>
        foreach($xml->Param as $name => $value) {
            echo strtoupper((string) $value) . ' ';
        }
    }
}
Maintenant, observer ci-dessous le bootstrap de notre application :
Notez qu'il faut définir la librairie Zend et Zendex dans l'include_path.
Fichier Bootstrap /htdocs/index.php

<?php

// l'include_path est censé être définit

require_once 'Zendex/Bootstrap.php';

Zendex_Bootstrap::launch('bootstrap.xml');

// SORTIE HTML : ONE PARAMETER TWO PARAMETERS;
Vous venez de voir, très rapidement, le fonctionnement d'un dispatcher.
Lisez ce qui suit, vous découvrirez tout ce qu'il est possible de faire...



I-B-2. Le dispatcher Zend

Zendex_Bootstrap comprend par défaut un dispatcher nommé Zend.
Ce dispatcher contient les classes du Zend Framework les plus utilisées dans le bootstrap (cache, config, db, controller...).
Les conventions de nommage des balises sont simples : elles respectent pour la plupart des cas les noms de classes, méthodes et arguments du Zend Framework.


I-B-2-a. Configurer Zend_Loader
Ici nous activons l'auto_load grâce à Zend_Loader::registerAutoLoad() :
Fichier bootstrap.xml

<?xml version="1.0"?>
<Bootstrap>
    <LoadDispatcher className="Zend" />
    <Zend>
        <Loader>
            <registerAutoload />
        </Loader> 
    </Zend>
</Bootstrap>

I-B-2-b. Configurer Zend_Version

I-B-2-b-1. L'attribut version de la balise <Zend>
Nom Défaut Requis Description
version   NON La version du Zend Framework que vous utilisez

Si vous définissez l'attribut version de la balise <Zend>, le bootstrap fera une vérification de votre valeur avec Zend_Version::compareVersion(). Si la version demandé dans l'attribut ne correspond pas avec la version du Zend Framework installé dans l'include_path, Zendex_Bootstrap renverra une exception.
Fichier bootstrap.xml

<?xml version="1.0"?>
<Bootstrap>
    <LoadDispatcher className="Zend" />
    <Zend version="1.0.3"></Zend>
</Bootstrap>

I-B-2-c. Configurer Zend_Cache
La configuration de Zend_Cache se fera par l'intermédiaire de Zendex_Setup. Il peut être intéressant de configurer les objets Zend_Cache via Zendex_Bootstrap. Cela permet, dans un premier temps, d'alléger le code php du bootstrap, et ainsi de centraliser la gestion des instances grâce à Zendex_Setup.


I-B-2-c-1. Les attributs de la balise <Zend><Cache><Add>
Nom Défaut Requis Description
id nombre aléatoire OUI L'identifiant unique de votre cache
frontend   OUI Comme si vous utilisez Zend_Cache_Core
backend   OUI Comme si vous utilisez Zend_Cache_Core
extends   NON Effectue une fusion des options prédéfinies avec les options définies.

I-B-2-c-2. Exemple d'utilisation
Ici, nous configurons deux instances de cache.
La première, qui aura pour identifiant OutputFile, sera muni du frontend Core et du backend Output. Les frontendOptions et backendOptions seront définies via la balise <Zend><Cache><Options><default>.
Le seconde, CoreFile, sera muni du backend File, les options hériteront les options default, mais nous mettons ici l'option automatic_serialization sur false :
Fichier bootstrap.xml

<?xml version="1.0"?>
<Bootstrap>
    <LoadDispatcher className="Zend" />
    <Zend>
        <Cache>
        
            <!-- Ajout des caches -->
            <Core>
                <Add id="OutputFile" frontend="Core" backend="Output" extends="default" />
                <Add id="CoreFile" frontend="Core" backend="File" extends="default">
                    <frontendOptions>
                        <automatic_serialization>false</automatic_serialization>
                    </frontendOptions>
                </Add>
            </Core>
        	
            <!-- Définition d'options pre-définies -->
            <Options>
                <default>
                    <frontendOptions>
                        <lifetime>86400</lifetime>
                        <automatic_serialization>true</automatic_serialization>
                    </frontendOptions>
                    <backendOptions>
                        <cache_dir>/path/to/default/</cache_dir>
                    </backendOptions>
                </default>
            </Options>
        </Cache>
    </Zend>
</Bootstrap>
Il est maintenant possible de récupérer nos instances de caches via Zendex_Setup.
Rappelons que ces instances seront créer seulement si vous souhaitez les récupérer :
Fichier Bootstrap /htdocs/index.php

<?php
Zendex_Bootstrap::launch('bootstrap.xml');

// Jusque ici, aucun objet Zend_Cache_Core n'a été créer, 
// ils sont configurés pour une utilisation éventuelle 

$setup  = Zendex_Setup::getInstance();
$file   = $setup->getCache('CoreFile'); 
$output = $setup->getCache('OutputFile'); 

I-B-2-d. Configurer Zend_Config
La configuration de Zend_Config se fera par l'intermédiaire de Zendex_Setup. Il arrive souvent d'avoir à utiliser plusieurs fichiers de configuration dans une application, mais est-ce que ces fichiers seront toujours utilisés à chaque requête ? Par forcément. L'objectif de la configuration de Zend_Config via Zendex_Bootstrap, c'est de pouvoir centraliser la gestion de ces fichiers via Zendex_Setup, et surtout de bénéficier de l'attribut cache permettant de mettre en cache cet objet de config :


I-B-2-d-1. Les attributs de la balise <Zend><Config><File>
Nom Défaut Requis Description
id nombre aléatoire OUI L'identifiant unique de votre config
type Xml OUI Le type de votre fichier de config. 'Xml' ou 'Ini'
cache   OUI L'id du cache préalablement créer que vous souhaitez utiliser pour mettre en cache votre fichier de config

I-B-2-d-2. Exemple d'utilisation
Ici, nous allons configurer deux instances de Zend_Config :
Fichier bootstrap.xml

<?xml version="1.0"?>
<Bootstrap>
    <LoadDispatcher className="Zend" />
    <Zend>
        <Config>
            <File id="default" type="Xml" cache="CoreFile">
                <filename>/my/config.xml</filename>
                <section>production</section>
                <allowModifications>false</allowModifications>
            </File>
            <File id="params" type="Xml" cache="CoreFile">
                <filename>/my/params.xml</filename>
                <section>production</section>
                <allowModifications>false</allowModifications>
            </File>
        </Config>
    </Zend>
</Bootstrap>
Il est maintenant possible de récupérer nos instances Zend_Config via Zendex_Setup.
Rappelons que ces instances seront créer seulement si vous souhaitez les récupérer :
Fichier Bootstrap /htdocs/index.php

<?php
Zendex_Bootstrap::launch('bootstrap.xml');

// Jusque ici, aucun objet Zend_Config n'a été créer, 
// ils sont configurés pour une utilisation éventuelle 

$setup = Zendex_Setup::getInstance();

$default = $setup->getConfig(); // retourne la config id 'default'
$params = $setup->getConfig('params'); // retourne la config id 'params'

I-B-2-e. Configurer Zend_Db

I-B-2-e-1. Les attributs de la balise <Zend><Db><Adapter>
Nom Défaut Requis Description
id nombre aléatoire OUI L'identifiant unique de votre adapter
cache   OUI L'id du cache préalablement créer que vous souhaitez utiliser pour mettre en cache l'instance de votre adapter (avant la connexion).

I-B-2-e-2. Les attributs de la balise <Zend><Db><Table><setDefaultAdapter>
Nom Défaut Requis Description
id nombre aléatoire OUI L'identifiant de l'apdater à utiliser

I-B-2-e-3. Les attributs de la balise <Zend><Db><Table><setDefaultMetadataCache>
Nom Défaut Requis Description
id nombre aléatoire OUI L'identifiant du cache préalablement définit

I-B-2-e-4. Exemple d'utilisation
Fichier bootstrap.xml

<?xml version="1.0"?>
<Bootstrap>
    <LoadDispatcher className="Zend" />
    <Zend version="1.0.3">	
        <Db>
            <Adapter id="default" cache="CoreFile">
                <adapter>Pdo_Mysql</adapter>
                <params>
                    <host>mysql.server.com<</host>
                    <username>root</username>
                    <password>********</password>
                    <dbname>MyDatabase</dbname>
                </params> 
                <profiler>true</profiler>
            </Adapter>
            <Adapter id="mssql" cache="CoreFile">
                <adapter>Pdo_Mssql</adapter>
                <params>
                    <host>mssql.server.com</host>
                    <username>root</username>
                    <password>*******</password>
                    <dbname>MyDatabase</dbname>
                </params> 
                <profiler>true</profiler>
            </Adapter>
            <Table>
                <setDefaultAdapter id="default" />
                <setDefaultMetadataCache id="Zend_Db_Table_Metadata" />
            </Table>
        </Db>
        
    </Zend>
</Bootstrap>
Fichier Bootstrap /htdocs/index.php

<?php
Zendex_Bootstrap::launch('bootstrap.xml');

// Jusque ici, aucun objet Zend_Db n'a été créer, 
// ils sont configurés pour une utilisation éventuelle 

$setup = Zendex_Setup::getInstance();

$default = $setup->getDb(); // rretourne l'adapter. id 'default' => Pdo_Mysql
$params = $setup->getDb('mssql'); // retourne l'adapter. id 'mssql' => Pdo_Mssql

// Maintenant, les objet sont instanciés et prêt à l'emploi

I-B-2-f. Configurer Zend_Controller

I-A-2-f-1. Configurer Zend_Controller_Front
Ici, l'objectif de la configuration sera d'éxecuter la méthode Zend_Front_Controller::addControllerDirectory() autant de fois qu'il y aura de balises <dir>, et pareillement pour Zend_Front_Controller::addModuleDirectory().
Nous enregistrer aussi deux plugins via la balise <registerPlugin> :
Fichier bootstrap.xml

<?xml version="1.0"?>
<Bootstrap>
    <LoadDispatcher className="Zend" />
    <Zend>
        <Controller>
            <Front>
                <addControllerDirectory>
                    <dir module="MyModule">/path/to/mymodule/controller</dir>
                    <dir module="otherModule">/path/to/othermodule/controller</dir>
                </addControllerDirectory>
                <addModuleDirectory>
                    <dir>/path/to/my/modules</dir>
                </addModuleDirectory>
                <registerPlugin>
                    <Plugin className="My_Controller_Plugin" stackIndex="1" />
                    <Plugin className="Another_Controller_Plugin" stackIndex="0" />
                </registerPlugin>
            </Front>
        </Controller>
    </Zend>
</Bootstrap>

I-B-2-f-2. Configurer Zend_Controller_Action
Ici, l'objectif de la configuration sera d'ajouter plusieurs préfix via Zend_Controller_Action_HelperBroker::addPrefix() et plusieurs path via Zend_Controller_Action_HelperBroker::addPath() :
Fichier bootstrap.xml

<?xml version="1.0"?>
<Bootstrap>
    <LoadDispatcher className="Zend" />
    <Zend>
        <Controller>
            <Action>
                <HelperBroker>
                    <addPrefix>
                        <Prefix>Zendex_Controller_Action_Helper</Prefix>
                        <Prefix>My_Controller_Action_Helper</Prefix>
                    </addPrefix>
                    <addPath>
                        <Path prefix="Zendex_Controller_Action_Helper">
                            /path/to/zendex/controller/action/helper
                        </Path>
                        <Path prefix="My_Controller_Action_Helper">
                            /path/to/my/controller/action/helper
                        </Path>
                    </addPath>
                </HelperBroker>
            </Action>
        </Controller>
    </Zend>
</Bootstrap>

I-B-2-f-3. Configurer Zend_Controller_Router
Ici, nous ajoutons une route simple, une route static et une route regex :
Fichier bootstrap.xml

<?xml version="1.0"?>
<Bootstrap>
    <LoadDispatcher className="Zend" />
    <Zend version="1.0.3">
        <Controller>
            <Router>
            
                <Route route="lang/:lang" id="simpleRoute">
                    <defaults>
                        <controller>lang</controller>
                        <action>index</action>
                        <lang>fr</lang>
                    </defaults>
                    <reqs>
                        <lang>\d+</lang>
                    </reqs>
                </Route>	

                <RouteStatic route="login" id="staticRoute">
                    <defaults>
                        <controller>auth</controller>
                        <action>login</action>
                    </defaults>
                </RouteStatic>
	        	
                <RouteRegex route="archive/(\d+)/(\d+)" id="regexRoute">
                    <defaults>
                        <controller>archive</controller>
                        <action>index</action>
                    </defaults>
                    <reqs>
                        <array id="1">archive_id</array>
                        <array id="2">archive_title</array>
                    </reqs>
                </RouteRegex>
	        	
            </Router>
        </Controller>
    </Zend>
</Bootstrap>

I-B-3. Le dispatcher IncludePath

Ce dispatcher possède deux atouts majeurs :
Ajouter des répertoires dans l'include_path Définir ces répertoires dans des constantes


I-B-3-a. Les attributs
Nom Défaut Requis Description createConstants false NON Si définit à true, les répertoires seront également définis en constantes withoutCurrent false NON Si définit à false, ajoute get_include_path()


I-B-3-b. Exemple d'utilisation
Fichier bootstrap.xml

<?xml version="1.0"?>
<Bootstrap>
    <LoadDispatcher className="IncludePath" />
    <IncludePath createConstants="true" withoutCurrent="false">
        <myApp>/path/to/my/app</myApp>
        <myLib>/path/to/my/library</myLib>
    </IncludePath>
</Bootstrap>
Fichier Bootstrap /htdocs/index.php

<?php
Zendex_Bootstrap::launch('bootstrap.xml');

// L'include_path à été redéfinit
// On accède aux répertoires grâce aux constantes :
echo MYAPP; // retourne "/path/to/my/app"
echo MYLIB; // retourne "/path/to/my/library"

I-B-4. Créer un dispatcher

Créer un dispatcher consiste à créer une classe héritant de Zendex_Bootstrap_Dispatcher_Abstract. Zendex_Bootstrap_Dispatcher_Abstract met à votre disposition la méthode _dispatch() vous permettant de parcourir le noeud xml et ce, récursivement.


I-B-4-a. Théorie de base
Un peu à la manière du Zend Framework et de ses helpers, vos dispatchers devront commencer par "Zendex_Bootstrap_Dispatcher_" pour se terminer avec le nom du dispatcher :
Un exemple commenté :

<?xml version="1.0"?>
<Bootstrap>

    <!-- Charge la classe Zendex_Bootstrap_Dispatcher_MonDispatcher -->
    <LoadDispatcher className="MonDispatcher" />
    
    <!-- Zendex_Bootstrap_Dispatcher_MonDispatcher::MonDispatcher() -->
    <MonDispatcher>
    
        <!-- Zendex_Bootstrap_Dispatcher_MonDispatcher::NiveauInferieur() -->
        <NiveauInferieur>
        
            <!-- Zendex_Bootstrap_Dispatcher_MonDispatcher::NiveauInferieur_AutreNiveau() -->
            <AutreNiveau UnAttribut="MonAttribut">
            	<unSousNiveauDeAutreNiveau>
                    valeur du sous niveau
            	</unSousNiveauDeAutreNiveau>
            	<unSousNiveauDeAutreNiveau>
                    une autre valeur du sous niveau
                </unSousNiveauDeAutreNiveau>
            </AutreNiveau>
        
        </NiveauInferieur>
        
    </MonDispatcher>
    
</Bootstrap>

I-B-4-b. Squelette de classe
Prenons l'exemple ci-dessus, notre dispatcher 'MonDispatcher', en voici une représentation :
Fichier Zendex/Bootstrap/Dispatcher/MonDispatcher.php

<?php
class Zendex_Bootstrap_Dispatcher_MonDispatcher extends Zendex_Bootstrap_Dispatcher_Abstract
{
    /**
     * Cette méthode est obligatoire, c'est elle qui lance le parcours 
     * des noeuds enfants de la balise XML <MonDispatcher></MonDispatcher>.
     *
     * Le nom de cette méthode, doit logiquement être le nom de votre dispatcher.
     * Cependant, rien ne vous empêche de l'appeler autrement.
     *
     * @param SimpleXMLElement $xml
     */
    public function MonDispatcher($xml) 
    {
        $this->_dispatch($xml);
    }

    /**
     * @param SimpleXMLElement $xml 
     */
    public function NiveauInferieur($xml) 
    {
        $this->_dispatch($xml, 'NiveauInferieur_');
    }
    
    /**
     * @param SimpleXMLElement $xml 
     */
    public function NiveauInferieur_AutreNiveau($xml) 
    {
        // ici on récupère l'attribut 'UnAttribut' de la balise <AutreNiveau>
        echo strtoupper('MON ATTRIBUT : ' . $xml['UnAttribut']);
    	
        // ici on effectue un action sur <unSousNiveauDeAutreNiveau></unSousNiveauDeAutreNiveau>
        foreach($xml->unSousNiveauDeAutreNiveau as $name => $value) {
            echo strtoupper((string) $value) . ' ';
        }
    }
}

I-C. Zendex_Bootstrap_Plugin


I-C-1. Introduction

Dans Zend_Bootstrap, un plugin permet de modifier le comportement du dispatcher, ou encore d'effectuer une opération sur le fichier avant qu'il soit dispatcher.
Il est à noter que la gestion des plugins est fortement inspirée de la gestion des plugins Zend_Controller_Plugin_Abstract et Zend_Controller_Plugin_Broker.
Charger un plugin dans la configuration

<?xml version="1.0"?>
<Bootstrap>
    <LoadPlugin className="MyPlugin" />
</Bootstrap>

I-C-2. Le plugin Xpath

Zendex_Bootstrap comprend par défaut un plugin nommé Xpath.
Xpath, vous ne connaissez pas ? cliquez ici.


I-B-2-A. La fonction $XPATH.XML{}
Cette méthode permet de récupérer un noeud entier, par exemple :
Fichier bootstrap.xml

<?xml version="1.0"?>
<Bootstrap>
    <LoadPlugin className="Xpath" />

    <anotherTag>
        <subLevel>custom value<subLevel>
    </anotherTag>
    
    $XPATH.XML{//anotherTag}
    $XPATH.XML{//anotherTag//subLevel}    
</Bootstrap>
Fichier bootstrap.xml après le passage du plugin Xpath, notez la duplication de l'élément <anotherTag> et <subLevel> :

<?xml version="1.0"?>
<Bootstrap>
    <LoadPlugin className="Xpath" />

    <anotherTag>
        <subLevel>custom value<subLevel>
    </anotherTag>
    
    <anotherTag>
        <subLevel>custom value<subLevel>
    </anotherTag>
    <subLevel>custom value<subLevel>   
</Bootstrap>

I-C-2-B. La fonction $XPATH.IN{}
Cette méthode permet de récupérer le noeud enfant sous forme de string , par exemple :
Fichier bootstrap.xml

<?xml version="1.0"?>
<Bootstrap>
    <LoadPlugin className="Xpath" />

    <anotherTag>
        <subLevel>custom value<subLevel>
    </anotherTag>
    
    <newTag>$XPATH.IN{//anotherTag//subLevel}</newTag>  
</Bootstrap>
Fichier bootstrap.xml après le passage du plugin Xpath, notez que l'on à récupérer uniquement la chaine se trouvant dans <subLevel> et </subLevel> :

<?xml version="1.0"?>
<Bootstrap>
    <LoadPlugin className="Xpath" />

    <anotherTag>
        <subLevel>custom value<subLevel>
    </anotherTag>
    
    <newTag>custom value</newTag>    
</Bootstrap>

I-C-2-C. Exemple d'utilisation
Ci-dessous, un exemple d'utilisation pour facilité la mise en place de l'include_path :
Fichier bootstrap.xml SANS XPATH :

<?xml version="1.0"?>
<Bootstrap>
    <LoadDispatcher className="IncludePath" />
    <LoadPlugin className="Xpath" />

    <IncludePath separator=":" createConstants="true" withoutCurrent="false">
        <APP>/long/path/to/my/app/on/sublevel/with/more/folders</APP>
        <LIB>/long/path/to/my/app/on/sublevel/with/more/folders/library</LIB>
        <CONF>/long/path/to/my/app/on/sublevel/with/more/folders/config</CONF>
        <LOCALE>/long/path/to/my/app/on/sublevel/with/more/folders/locale</LOCALE>
        <COMPONENTS>/long/path/to/my/app/on/sublevel/with/more/folders/components</COMPONENTS>
    </IncludePath>
    
</Bootstrap>
Fichier bootstrap.xml AVEC XPATH :

<?xml version="1.0"?>
<Bootstrap>
    <LoadDispatcher className="IncludePath" />
    <LoadPlugin className="Xpath" />

    <IncludePath separator=":" createConstants="true" withoutCurrent="false">
        <APP>/long/path/to/my/app/on/sublevel/with/more/folders</APP>
        <LIB>$XPATH.IN{//APP}/library</LIB>
        <CONF>$XPATH.IN{//APP}/config</CONF>
        <LOCALE>$XPATH.IN{//APP}/locale</LOCALE>
        <COMPONENTS>$XPATH.IN{//APP}/components</COMPONENTS>
    </IncludePath>
    
</Bootstrap>

I-C-3. Créer un plugin

Créer un plugin consiste à créer une classe héritant de Zendex_Bootstrap_Plugin_Abstract.
Zendex_Bootstrap comprend une architecture de système de plugin qui permet à l'utilisateur d'appeler du code lorsque certains événements se produisent dans le processus de dispatch.
Zendex_Bootstrap utilise un plugin (broker) comme de registre pour les plugins, et le plugin (broker) assure que les méthodes sont appelées sur chaque plugin enregistrés via la balise <LoadPlugin className="" />.
Les méthodes d'événement sont définies dans la classe abstraite Zendex_Bootstrap_Plugin_Abstract, à partir duquel les classes de plugins héritent :

  • launchStartup() est appelé avant que Zendex_Bootstrap lance le dispatch du fichier xml.
  • dispatchLoopStartup() est appelée avant que Zendex_Bootstrap_Dispatcher_Abstract::_dispatch() entre dans sa boucle.
  • preDispatchElement() est appelée avant qu'un élément soit éventuellement dispatcher.
  • postDispatchElement() est appelée après qu'un élément soit éventuellement dispatcher.
  • dispatchLoopShutdown() est appelée après que Zendex_Bootstrap_Dispatcher_Abstract::_dispatch() ait finit sa boucle.

I-C-3-a. Squelette d'un plugin

<?php
class Zendex_Bootstrap_Plugin_MyPlugin extends Zendex_Bootstrap_Plugin_Abstract
{
    public function launchStartup() 
    {
        $xmlDocument = Zendex_Bootstrap::getXmlDocument();
    }
    
    public function dispatchLoopStartup(SimpleXMLElement $xml) 
    {
        Zend_Debug::dump("Start dispatch loop");
    }
    
    public function preDispatchElement($tagName, SimpleXMLElement $xml) 
    {
        Zend_Debug::dump("---> preDispatchElement <$tagName>");
    }
    
    public function postDispatchElement($tagName, SimpleXMLElement $xml) 
    {
        Zend_Debug::dump("---> preDispatchElement <$tagName>");
    }
    
    public function dispatchLoopShutdown($tagName, SimpleXMLElement $xml) 
    {
        Zend_Debug::dump("Shutdown dispatch loop");
    }
}
 

Valid XHTML 1.1!Valid CSS!

Copyright © 2008 Simon Martins. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.