2010-06-04 9 views
0

J'ai un simple formulaire d'édition de contenu (Zend_Form) que je remplis() avec un tableau généré à partir de la méthode Zend_Db_Table_Row_Abstract-> toArray(). Cela fonctionne plutôt bien.Comment remplir() un Zend_Form entier moins un élément de formulaire?

L'objectif est et non de remplir l'un des éléments de formulaire avec une valeur.

Je suis en train de résoudre ce problème en supprimant cette paire clé => valeur spécifique du tableau de remplissage. Je suis curieux de savoir s'il existe un moyen de le faire lors de la génération de l'élément de formulaire lui-même.

Say ...

$foo = new Zend_Form_Element_Textarea('foo'); 
$foo->ignoreDefaultValue(true); 
$form->addElement($foo); 

Toute pensée?

Répondre

0

Non. Lorsque vous faites $form->validate($data) ou $form->populate($data) - interne est simple

foreach($formElements as $element) { 
    $element->setDefault($newValue); 
} 

theare pas de drapeaux internes spéciaux comme $form->_populationInProgress = true

u peut achive ce facile par l'extension Zend_Form

class App_Form extends Zend_Form 
{ 
    protected $_ignoreDefaults = array(); 

    public function addIgnoredDefaultsElement(Zend_Form_Element $el) 
    { 
     $this->_ignoreDefaults[$el->getName()] = true; 
    } 

    public function isInIgnoregDefaults($name) 
    { 
     return (bool)array_key_exists($name, $this->_ignoreDefaults); 
    } 

    public function setDefault($name, $value) 
    { 
     if (!$this->isInIgnoregDefaults($name)) { 
      parent::setDefault($name, $value); 
     } 
     return $this;  
    } 
} 
Questions connexes