2011-06-03 37 views
0

Im无法禁用填充Zend_Form中的值。Zend_Form禁用之前填充isValid()

我有我自己的表格类。使用隐藏的标记元素,我希望每次调用(或重新发布)表单时动态设置随机值。我认为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 
} 

SOLUTION:我发现的唯一的解决方法是调用中的setValue和的Controler后的isValid方法。例如。在错误块。

问题:是否有任何方式直接在表单类中设置元素值或者在表单类中或在调用isValid()之前禁用填充值?

+1

你有没有考虑过使用Zend_Form_Element_Hash而不是创建自己的令牌? – Marcin 2011-06-03 13:33:28

回答

0

SECOND SOLUTION:我发现的第二个解决方案是在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; 
} 

是否有其他解决方案,例如:一些元素选项做这个工作更简单?

1

我认为这是最好的方法。

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

它不坏改变一些东西,但不直接做Zend框架内

相关问题