0

我无法禁用 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 和 isValid 方法之后调用 setValue。例如。在错误块中。

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

4

2 回答 2

1

我认为这是最好的方法。

我经常使用 Zend Framework,并且有自己的库来覆盖一些 Zend 类。

改变一些东西还不错,但不要直接在 Zend Framework 中做

于 2011-08-24T08:45:33.183 回答
0

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

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;
}

是否有任何其他解决方案,例如。一些元素选项让这项工作更简单?

于 2011-06-03T14:43:44.847 回答