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的建议)。