Zend_Form在isValid()之前禁用填充

时间:2011-06-03 13:19:14

标签: zend-form populate

我无法在Zend_Form中禁用填充值。

我有自己的表格类。使用隐藏的令牌元素,我希望每次调用(或重新发布)表单时动态设置随机值。我以为setValue会成功。

class MY_Form_Test extends Zend_Form {
    public function init() {
    ...

    $this->addElement('hidden', 'token');
    $this->getElement('token')->setValue(uniqid('',true));
    ... 
}

但是:当我有这样的简单控制器时。 Zend自动填充旧的隐藏值,除了生成新的隐藏值。

$form = new JC_Form_Test();
if($form->isValid($_POST)){
   // Action ... 
}
else{
   // Error
}

解决方案:我找到的唯一解决方案是在Controler和AFTER isValid方法中调用setValue。例如。在错误块中。

问题:有没有办法直接在表单类中设置元素值或者在表单类中或在调用isValid()之前禁用填充值?

2 个答案:

答案 0 :(得分:1)

我认为这是最好的方法。

我使用Zend Framework工作很多,并拥有自己的库来覆盖一些Zend类。

改变一些东西并不坏,但不要直接在Zend Framework中做到这一点

答案 1 :(得分:0)

第二个解决方案:我发现的第二个解决方案是在Form类中重载isValid()方法。像这样。然后我不需要将setValue()放入每个Controller。

class MY_Form_Test extends Zend_Form {

    ...

    public function isValid($data){
    // Propagate values
    $valid = parent::isValid($data);

    $this->getElement('token')->setValue(uniqid('',true));

    return $valid;
}

还有其他解决方案,例如。一些元素选项可以更简单地完成这项工作吗?