Bonjour,
J'aimerai savoir s'il serait possible que l'un d'entre vous pourrait me montrer un code complet d'un Zend_Form simple utilisant des décorateurs ? Parce que je ne saisis vraiment pas la manière dont ceux-ci se mettent en place.
Merci.
Bonjour,
J'aimerai savoir s'il serait possible que l'un d'entre vous pourrait me montrer un code complet d'un Zend_Form simple utilisant des décorateurs ? Parce que je ne saisis vraiment pas la manière dont ceux-ci se mettent en place.
Merci.
Le mieux pour comprendre les décorateurs est de te faire des tests.
Commence déjà par voir à quoi ressemble les décorateurs par défaut.
$form->getElement('unChampTexte')->getDecorators(); et $form->getDecorators()
Les décorateurs s'ajoutent les uns après les autres (une forme de pile). Ils s’englobent les uns derrière les autres. La configuration de 'placement' sur append ou prepend permet de "sortir" créer des voisins.
Mon explication est peut-être pas très compréhensible, mais ça donne une idée.
Sinon, ce que je peux dire, c'est qu'une fois l'utilisation des décorateurs comprise, c'est assez puissant à utiliser.
Merci de me répondre.
Je vais sûrement passer pour un novice mais... où faut il placer ce bout de code ?
Un peu où tu veux.
Soit dans le controlleur, dans une vue, etc.
Le but est de voir les décorateurs sous forme de tableau avec un var_dump ou print_r.
En fait je commence à saisir.
J'ai crée un dossier "maLib" dans library, puis un "Form" et "Decorator".
Dans ce dossier (decorator), j'ai crée une classe "MaLib_Form_Decorator"
Je souhaite faire marcher ce bout de formulaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <?php class MaLib_Form_Decorator_Html extends Zend_Form_Decorator_Abstract { public function render($content) { $placement = $this->getPlacement(); switch ($placement) { case self::APPEND: return $content . $this->_options['html']; break; case self::PREPEND: return $this->_options['html'] . $content; break; } } }
(tuto pris ici : http://wiip.fr/content/un-decorator-...d_form_element )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $submit = new Zend_Form_Element_Submit('create'); $submit->setLabel('Créer le site') ->addPrefixPath('MaLib_Form_Decorator', '/library/maLib/Form/Decorator/', 'decorator') ->setDecorators(array( 'ViewHelper', array('Html', array('html' => ' ou <a href="/">Annuler</a>')) ));
et j'ai l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Warning: Exception caught by form: Plugin by name 'Html' was not found in the registry; used paths: ZendX_JQuery_Form_Decorator_: ZendX/JQuery/Form/Decorator/ MaLib_Form_Decorator_: /library/maLib/Form/Decorator/ Zend_Form_Decorator_: Zend/Form/Decorator/
Tu es sur de ce chemin : "/library/maLib/Form/Decorator/" ?
Le premier / représente la racine du système.
Si "library" est dans ton répertoire de projet, normalement ceci devrait fonctionner :
APPLICATION_PATH.'/../library/maLib/Form/Decorator/'
Est-ce que cela a un rapport avec le fait que je n'étends pas "Zend_Form" mais "ZendX_JQuery_Form" ?
J'ai cette arborescence :
![]()
Il semble que l'erreur venait du fait qu'il fallait que j'appelle mon fichier "Html" dans
/library/maLib/Form/Decorator/Html.php
Mais cela m'a généré une autre erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Warning: include_once(/maLib/Form/Decorator/Html.php): failed to open stream: No such file or directory in /var/www/html/zendTest/library/Zend/Loader/PluginLoader.php
Comme je te l'ai dit plus haut, le chemin vers ta library doit être faux.
Enlève le premier slash (/) dans ton chemin.
Merci
J'ai une autre erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Notice: Undefined index: html in /var/www/html/zendTest/library/maLib/Form/Decorator/Html.php on line 8![]()
J'ai remplacé le 'html' par 'Html', et il me semble que cela fonctionne, sauf que le label ne fonctionne pas.
Et pour finir cet épique décorateur, le label ne s'affichait pas à cause ... d'un accent
Partager