Les étranges décorateurs de M. Zend_Form_Element_Captcha

Zend_Form_Element_Captcha qui permet d'ajouter un Captcha à un formulaire a un comportement un peu particulier avec ses décorateurs.

Premièrement, il ajoute dans sa méthode render un décorateur Captcha aux décorateurs que vous avez défini. Ce decorator génère le code HTML pour l'image, le champ caché (INPUT de type HIDDEN) et le champ texte permettant à l'utilisateur de saisir le code du Captcha. Contrairement aux autres types de champ de formulaire, on n'a donc pas de decorator ViewHelper à spécifier.

Deuxièmement, Zend_Form_Element_Captcha est affecté d'un bogue qui fait que les alias de décorateurs sont perdus lors de l'appel de cette fameuse méthode render. Résultat, il est impossible d'utiliser deux décorateurs de la même classe sur un même élément. J'ai cherché comment contourner le problème mais je ne suis pas parvenu à une solution satisfaisante. J'ai finalement obtenu le résultat désiré avec une règle CSS.

Donc, comme dirait Maurice, Beware of Zend_Form_Element_Captcha !

Commentaires

Hello,

am using a Zend_Form_Element_File in my form.

but when i passed a decorator i got an error " Exception caught by form: No file decorator found... unable to render file element Stack Trace: #0 /var/www/pg/ividence/library/Zend/Form/Decorator/FormElements.php(101): Zend"


$file->setLabel($this->view->translate('Image'))->setRequired(false)
->setAttrib('id', 'news-image')
->addValidator('FilesSize', false, 10000)
->addValidator('ImageSize', false, array('minwidth' => 30, 'maxwidth' => 90, 'minheight' => 30, 'maxheight' => 90))
->addValidator('Extension', false, 'jpg,png,gif');

$form->setElementDecorators(array(
'ViewHelper',
'Description',
'Label',
'Errors',
new Zend_Form_Decorator_HtmlTag(
array('tag' => 'li','class'=>'news'))
), array('image'));

is there a way to pass the file upload element within a

  • tag like that
  • Image
  • Thank you for your kind help

    Ajouter un commentaire