我无法在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()之前禁用填充值?
答案 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;
}
还有其他解决方案,例如。一些元素选项可以更简单地完成这项工作吗?