Zend Framework:isValid()清除禁用表单字段中的值!

时间:2010-03-24 19:49:07

标签: zend-framework zend-form

提交表单时,请求中不会提交已禁用的表单字段。

因此,如果您的表单中有一个已停用的表单字段,则会使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!

无需重新填充表单,并创建重复的代码行,解决此问题的最佳方法是什么?

3 个答案:

答案 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()不会验证已禁用的字段。

参考:ZF Documentation