Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 23-04-2011 17:25:33

fhebert
Membre
Date d'inscription: 30-11-2010
Messages: 20

[Résolu][ZF 1.10.8][Zend_Form_Element_File] Nom du champ dans un subfo

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()) :

Code:

  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

 

#2 24-04-2011 20:10:40

fhebert
Membre
Date d'inscription: 30-11-2010
Messages: 20

Re: [Résolu][ZF 1.10.8][Zend_Form_Element_File] Nom du champ dans un subfo

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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages