2010-12-09 29 views
2

J'ai une configuration de formulaire assez complexe en utilisant Zend-Form. À un moment donné, je suis la mise en valeur d'une entrée cachée à l'aide:Zend-form setValue, vue a une valeur vide comme <input value = "">

$oHidden = new Zend_Form_Element_Hidden('ratings'.$k);   
$oHidden->setValue('ratings');Zend_Debug::dump($oHidden); 
$this->addElements(array($oHidden)); 

Cette méthode fonctionne bien dans d'autres endroits de la même forme, mais celui-ci, et un autre comme il sort:

<input type="hidden" name="ratings1" value="" id="ratings1" /> 

J'ai largué la variable $ oHidden et sorties:

object(Zend_Form_Element_Hidden)#143 (29) {
... ["_value":protected] => string(7) "ratings" ["_view":protected] => NULL ["_isPartialRendering":protected] => bool(false) }

il définit la valeur très bien pendant un certain temps, mais il ne le rend pas. S'il vous plaît laissez-moi savoir où commencer à chercher des raisons de ce comportement.

Merci, Alek

+1

Besoin de voir plus de code pour confirmer. – Phil

+0

Eh bien, j'utilisais 'idValid()' plus tard. J'ai d'abord réussi à trouver une solution de contournement avec le décorateur 'HtmlTag', mais j'ai ensuite décidé d'écrire ma propre classe Form et les choses se sont simplifiées. Merci quand même – Alek

Répondre

3
$hidden = new Zend_Form_Element_Hidden(array('name' => 'ratings', 'value' => 'ratings')); 

Essayez!

+0

Merci beaucoup !!!! – softwareplay

5

Le problème est précisément la fonction isValid(). Il efface toutes les valeurs du formulaire et le repeuple avec les paramètres qui lui sont transmis. Si un paramètre est absent, il n'apparaîtra plus dans le formulaire, même s'il a été défini explicitement quelques lignes plus tôt.

Mon dossier était un champ caché facultatif "redirection" dans un formulaire de connexion. Voici le code (simplifié pour une meilleure lisibilité):

$form = new Form_Login(); 
$redirect = $this->_getParam('redirect','/user/login/welcome'); 
$form->addElement('Hidden','redirect',array('value' => $redirect)); 

if ($this->_request->isPost() && $form->isValid($this->_getAllParams())) { 
    // WTF! the "request" field has no value!!! 
} 

La solution a inscrit l'action parametre:

$form = new Form_Login(); 
$redirect = $this->_getParam('redirect','/user/login/welcome'); 
$this->_setParam('redirect',$redirect); 
$form->addElement('Hidden','redirect',array('value' => $redirect)); 

if ($this->_request->isPost() && $form->isValid($this->_getAllParams())) { 
    // AHA! now it works! 
} 

Je sais que la question est vieille d'un demi-année, mais oh bien, mieux vaut tard que jamais: RÉ. Je suppose que vous définissez la valeur pour vider à un stade ultérieur, peut-être via la méthode `isValid()` de méthode