【问题标题】:Zend_Form disable populate before isValid()Zend_Form 在 isValid() 之前禁用填充
【发布时间】:2011-06-03 13:19:13
【问题描述】:

我无法禁用 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() 之前禁用填充值?

【问题讨论】:

  • 您是否考虑过使用 Zend_Form_Element_Hash 而不是创建自己的令牌?

标签: zend-form populate


【解决方案1】:

我认为这是最好的方法。

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

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

【讨论】:

    【解决方案2】:

    第二种解决方案: 我找到的第二种解决方案是在 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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-28
      • 2022-08-14
      • 1970-01-01
      • 2021-05-22
      • 2015-09-02
      • 1970-01-01
      • 2018-04-07
      • 2018-03-13
      相关资源
      最近更新 更多