如何填充()整个Zend_Form减去一个表单元素?

时间:2010-06-04 19:18:00

标签: php zend-framework zend-form

我有一个简单的内容编辑表单(Zend_Form),我使用Zend_Db_Table_Row_Abstract-> toArray()方法生成的数组填充()。它运作得很好。

目标是使用值填充其中一个表单元素。

我目前正在通过删除特定密钥来解决此问题=>填充数组中的值对。我很好奇在生成表单元素本身时是否有办法做到这一点。

说...

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

不。 当您执行$form->validate($data)$form->populate($data)时 - 内部这很简单

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

没有像$form->_populationInProgress = true

这样的特殊内部标志

通过扩展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;    
    }
}