14.4. Aides pour la vue
Précédent | Chapitre 14. Zend_View | Suivant

## 14.4. Aides pour la vue

Dans vos scripts de vue, il est souvent nécessaire d'effectuer certaines actions complexe encore et encore; i.e formatter une date, générer des éléments de formulaire, afficher des liens d'action. Vous pouvez utiliser des classes d'aide pour effectuer ce genre de tâches.

Pour utiliser une aide dans votre script de vue, appelez le en utilisant `$this->helperName()`. Dans les coulisses, `Zend_View` va charger la classe `Zend_View`_Helper_HelperName, créer une instance de cet objet, et appeler sa méthode `helperName()`. L'instance de l'objet est persistance dans l'instance de `Zend_View`, et est réutilisée pour tout les appels futur à `$this->helperName()`.

### 14.4.1. Aides initiales

`Zend_View` fournit avec un jeu de claisses d'aides initial, tout sont liées à la génération d'éléments de formulaire. Chacune affiche et échappe l'élement voulu :

- formButton($name, $value, $attribs): Crée un élément <input type="button" />

- formCheckbox($name, $value, $attribs, $options): Crée une élément <input type="checkbox" /> . Le paramètre $options est un tableau dans lequel la première valeur est la valeur "checked", et la seconde "unchecked" (les défauts sont '1' et '0'). Si $value correspond à la valeur "checked", la boite sera cochée.

- formFile($name, $value, $attribs): Crée un élément <input type="file" />

- formHidden($name, $value, $attribs): Crée un élément <input type="hidden" /> .

- formPassword($name, $value, $attribs): Crée un élément <input type="password" /> .

- formRadio($name, $value, $attribs, $options): Crée une série d'éléments <input type="button" />, une pour chaque element $options. Dans le tableau $options, la clé de l'élément est la valeur de la radio, et la valeur de l'élément est l'étiquette de la radio. La radio $value sera précoché pour vous.

- formReset($name, $value, $attribs): Crée un élément <input type="reset" /> .

- formSelect($name, $value, $attribs, $options): Crée un bloc <select>...</select> , avec une <option> pour chaque élément $options. Dans le tableau $options, la clé de l'élément est la valeur de l'option, et la valeur de l'élément est sont étiquette optionnelle. L'option (ou les options) $value sera (ou seront) présélectionnées pour vous.

- formSubmit($name, $value, $attribs): Crée un élément <input type="submit" /> .

- formText($name, $value, $attribs): Crée un élément <input type="text" /> .

- formTextarea($name, $value, $attribs): Crée un bloc <textarea>...</textarea>

Les utiliser dans vos script de vue est très simple, voici un exemple. Notez que tout ce dont vous avez besoin, c'est de les appeler; elles vont se charger et s'instantier elle-même si besoin est.

    <?php
    // dans votre script de vue, $this se réfèrre à l'instance de Zend_View.
    //
    // Partons du principe que vous avez déjà assigné une série d'options de sélect dans un
    // tableau $countries =  array('us' => 'United States', 'il' => 'Israel', 'de' => 'Germany').
    ?>
    <form action="action.php" method="post">
        <p><label>Votre email :
            <?php echo $this->formText('email', 'you@example.com', array('size' => 32)) ?>
        </label></p>
        <p><label>Votre pays :
            <?php echo $this->formSelect('country', 'us', null, $this->countries) ?>
        </label></p>
        <p><label>??? Would you like to opt in ???
            <?php echo $this->formCheckbox('opt_in', 'yes', null, array('yes', 'no') ?>
        </label></p>
    </form>

La sortie résultante du script de vue ressemblera à ceci:

    <form action="action.php" method="post">
        <p><label>Votre email :
            <input type="text" name="email" value="you@example.com" size="32" />
        </label></p>
        <p><label>Votre pays :
            <select name="country">
                <option value="us" selected="selected">United States</option>
                <option value="il">Israel</option>
                <option value="de">Germany</option>
            </select>
        </label></p>
        <p><label>Would you like to opt in?
            <input type="hidden" name="opt_in" value="no" />
            <input type="checkbox" name="opt_in" value="yes" checked="checked" />
        </label></p>
    </form>

### 14.4.2. Chemin des aides

Comme pour les scripts de vue, votre contrôleur peut spécifier une pile de chemins dans lesquels `Zend_View` cherchera les classes d'aides. Par défaut, `Zend_View` cherche dans "Zend/View/Helper/*" . Vous pouvez dire à `Zend_View` de regarder dans d'autres endroits en utilisant les méthodes `setHelperPath()` et `addHelperPath()`.

    <?php
    $view = new Zend_View();
    $view->setHelperPath('/chemin/vers/plus/de/classes/d-aides');
    ?>

En fait, vous pouvez "empiler" les chemins en utilisant la méthode `addHelperPath()` Comme vous ajouter des chemins dans la pile, `Zend_View` va regarder dans le chemin le plus récemment ajouté, pour inclure la classe d'aide. Cela vous permet d'ajouter (ou bien de re-définir) la distribution initiale des aides, avec vos propes aides personnalisées.

    <?php
    $view = new Zend_View();
    $view->addHelperPath('/chemin/vers/des/aides');
    $view->addHelperPath('/autre/chemin/vers/des/aides');

    // maintenant, lorsque vous appelerez $this->helperName(), Zend_View
    // va rechercher en premier /chemin/vers/des/aides/HelperName.php, et ensuite dans
    // /autre/chemin/vers/des/aides/HelperName.php, et finalement dans
    // Zend/View/Helpers/HelperName.php

    ?>

### 14.4.3. Ecrire des aides personnalisées

Ecrire des aides personnalisées est facile, vous devez juste suivre ces règle :

- Le nom de la classe doit être `Zend_View`_Helper_*, où * est le nom de l'aide. I.e, si vous voulez écrire une aide appelée "actionSpeciale", le nom de la classe sera "`Zend_View`_Helper_ActionSpecial" (notez le changement de casse).

- La classe doit avoir une méthode publique dont le nom correspond au nom de l'aide; c'est la méthode qui sera appelé quand votre template appellera "$this->actionSpeciale()". Dans notre exemple "$this->actionSpeciale()", la déclaration de méthode requise serait "public function actionSpeciale()".

- En général, la classe ne devrait pas afficher directement les données (via echo ou print). Elle devrait retourner les valeurs pour être ensuite affichées. Les valeurs retournées devrait être échappées de façon appropriées.

- La classe doit être dans un fichier ayant le même nom que la méthode d'aide. Si on utilise la méthode "actionSpeciale()", le fichier devra être nommé "ActionSpeciale.php"

Placez les fichier de classe d'aide quelque part dans la pile des chemins d'aide, et `Zend_View` le chargera, l'instantiera, le rendre persistant, et l'exécutera automatiquement pour vous.

Voici un exemple du fichier "ActionSpeciale.php" :

    <?php
    class Zend_View_Helper_ActionSpeciale {
        protected $_count = 0;
        public function actionSpeciale()
        {
            $this->_count++;
            $output = "J'ai vu 'The Big Lebowsky' {$this->_count} foi(s).";
            return htmlspecialchars($output);
        }
    }
    ?>

Ensuite, dans un script de vue, vous pouvez appeler l'aide `ActionSpeciale` autant de fois que vous le souhaitez; elle sera instantiée une fois, et rendue persistante pendant toute la vie de l'instance de `Zend_View`.

    <?php
    // rappelez vous, $this se réfèrre à l'instance de Zend_View
    echo $this->actionSpeciale();
    echo $this->actionSpeciale();
    echo $this->actionSpeciale();
    ?>

La sortie pourrait alors ressemble à ceci :

    J'ai vu 'The Big Lebowsky' 1 foi(s).
    J'ai vu 'The Big Lebowsky' 2 foi(s).
    J'ai vu 'The Big Lebowsky' 3 foi(s).

Précédent | Niveau supérieur | Suivant
14.3. Scripts de vue | Sommaire | Chapitre 15. Zend_XmlRpc