Zend framework Zend Framework:isValid()清除禁用表单字段中的值!
提交表单时,禁用的表单字段不会在请求中提交 因此,如果您的表单有一个禁用的表单字段,那么使用Zend framework Zend Framework:isValid()清除禁用表单字段中的值!,zend-framework,zend-form,Zend Framework,Zend Form,提交表单时,禁用的表单字段不会在请求中提交 因此,如果您的表单有一个禁用的表单字段,那么使用Zend\u form::isValid()会有点令人沮丧 $form->populate($originalData); $form->my_text_field->disabled = 'disabled'; if (!$form->isValid($_POST)) { //form is not valid //since my_text_field is d
Zend\u 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!
不必重新填充表单并创建重复的代码行,解决此问题的最佳方法是什么?我使用从Zend_表单继承的自定义类。类添加了一些功能,并通过替换方法isValid解决了此问题,如下所示:
class Murdej_Form extends Zend_Form {
function isValid($data) {
$_data = $this->getValues();
$valid = parent::isValid($data);
$this->populate($_data);
return $valid;
};
};
您是否将元素设置为禁用,以便用户无法编辑其内容,而只能看到它?如果是这样的话,只需将元素的readonly属性设置为true,我认为它会这样工作。而不是使用
isValid()
我们可以使用isValidPartial()
。但是,与isValid()
不同的是,如果某个特定键不存在,它将不会对该特定元素运行验证。因此,isValidPartial()
不会对禁用的字段进行验证
参考资料:我也遇到了同样的问题,这也奏效了。正如robertbasic所说,只需设置“readonly”属性而不是“disabled”属性;有关详细信息,请参阅,特别是“disabled”、“readonly”和-readonly上的位可以成功,而disabled不能成功(因此未提交)。唯一的问题是,如果表单中未提交必填字段,则不会对其进行验证。它实际上不符合Zend表单的要求;HTML规范说禁用的元素不会被提交,而只读元素会被提交(这解释了下面@robertbasic的建议)。