Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous,
J'utilise un Zend_Form_Element_File dans un formulaire lui-même intégré dans un autre
formulaire avec la méthode Zend_Form::addSubForm.
Pour tous les autres types d'éléments cette intégration comme sous-formulaire implique lors de
l'affichage de celui-ci un renommage des champs sous la forme nom_du_sous-formulaire[nom_du_champ].
Ce renommage a lieu dans le code du décorateur Zend_Form_Decorator_ViewHelper ($name = $element->getFullyQualifiedName()) :
public function render($content) { $element = $this->getElement(); $view = $element->getView(); if (null === $view) { require_once 'Zend/Form/Decorator/Exception.php'; throw new Zend_Form_Decorator_Exception('ViewHelper decorator cannot render without a registered view object'); } if (method_exists($element, 'getMultiOptions')) { $element->getMultiOptions(); } $helper = $this->getHelper(); $separator = $this->getSeparator(); $value = $this->getValue($element); $attribs = $this->getElementAttribs(); $name = $element->getFullyQualifiedName(); $id = $element->getId(); $attribs['id'] = $id; $helperObject = $view->getHelper($helper); if (method_exists($helperObject, 'setTranslator')) { $helperObject->setTranslator($element->getTranslator()); } $elementContent = $view->$helper($name, $value, $attribs, $element->options); switch ($this->getPlacement()) { case self::APPEND: return $content . $separator . $elementContent; case self::PREPEND: return $elementContent . $separator . $content; default: return $elementContent; } }
Or l'élément File fait directement appel à Zend_Form_Decorator_File sans appel à Zend_Form_Decorator_ViewHelper.
C'est donc un comportement prévu par ZF et la doc (http://framework.zend.com/manual/en/zen … ments.file) le confirme (voir la note en dessous de l'exemple n°4 de la section).
Le problème c'est que le code dans le contrôleur s'en trouve compliqué pour la simple raison qui rend utiles les sous-formulaires :
si mon champ File est obligatoire mais que l'utilisateur a validé un autre sous-formulaire auquel celui-ci n'appartient pas j'obtiens des erreurs incohérentes.
Est-ce que quelqu'un connait ou devine la raison exacte de ce comportement ?
Merci !
Frédéric
Dernière modification par fhebert (24-04-2011 23:01:12)
Hors ligne
Bonsoir,
finalement je n'avais pas bien compris le fonctionnement du Zend_Form me semble t'il.
Même si le champ n'est pas inclus dans le sous-formulaire lors de l'affichage cela n'a pas
d'impact sur son fonctionnement.
1°) Les fichiers uploadés ne sont pas inclus dans le tableau $_POST mais $_FILES donc le champ
retrouve bien ses petits dans la mesure où les noms des champs file upload sont uniques pour tout le formulaire.
2°) et surtout le champ File reste défini dans le sous-formulaire et donc sa validation
n'est déclenchée que quand l'on demande la validation du sous-formulaire
correspondant.
Donc tout va bien en fait.
Frédéric
Dernière modification par fhebert (24-04-2011 20:11:22)
Hors ligne
Pages: 1