提交表单时,请求中不会提交已禁用的表单字段。
因此,如果您的表单中有一个已停用的表单字段,则会使Zend_Form::isValid()
的工作变得有点令人沮丧。
$form->populate($originalData);
$form->my_text_field->disabled = 'disabled';
if (!$form->isValid($_POST)) {
//form is not valid
//since my_text_field is disabled, it doesn't get submitted in the request
//isValid() will clear the disabled field value, so now we have to re-populate the field
$form->my_text_field->value($originalData['my_text_field']);
$this->view->form = $form;
return;
}
// if the form is valid, and we call $form->getValues() to save the data, our disabled field value has been cleared!
无需重新填充表单,并创建重复的代码行,解决此问题的最佳方法是什么?
答案 0 :(得分:5)
您是否将元素设置为禁用,以便用户无法编辑其内容但只能看到它?如果是这样,只需将元素的readonly属性设置为true,我认为它将以这种方式工作。
答案 1 :(得分:1)
我使用从Zend_Form继承的自定义类。类添加了一些功能并通过将方法isValid替换为以下方法来解决此问题:
class Murdej_Form extends Zend_Form {
function isValid($data) {
$_data = $this->getValues();
$valid = parent::isValid($data);
$this->populate($_data);
return $valid;
};
};
答案 2 :(得分:0)
我们可以使用isValid()
而不是isValidPartial()
。但是,与isValid()
不同,如果不存在特定键,则不会对该特定元素运行验证。因此,isValidPartial()
不会验证已禁用的字段。