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