ZF2 Form getData返回未经验证的数据

时间:2014-07-31 15:26:25

标签: zend-framework2 zend-form zend-inputfilter

我无法让我的第一个ZF2表格起作用! 以下是用于演示我的工作流程的缩写控制器操作:

$viewData['form'] = $form = new InstituteEditForm();
$form->setInputFilter(new InstituteInputFilter());
$defaultValues = ...;
$form->populateValues($defaultValues);
if ($request->isPost()) {
    $form->setData($request->getPost());
    if ($form->isValid()) {
        print_r('VALID<br/>');
        var_dump($form->getData());
    } else {
        print_r('INVALID<br/>');
        var_dump($form->getMessages());
        var_dump($form->getData());
    }
}
return new ViewModel($viewData);

InstituteInputFilter为某些元素定义带有过滤器和验证器的输入,但不是全部。 问题是,如果表单验证正常,则form-&gt; getData()返回所有值,而不仅仅是那些附加了输入的值,即它返回未经验证的数据。这应该不是这样的,不应该吗?

非常感谢你!

2 个答案:

答案 0 :(得分:0)

设置表单的正常步骤如下。我评论代码,所以你应该没有问题,以了解使用什么方法。您的主要错误是您没有bind表单类的默认值。

$defaultValues = .....; // call db entity from db or whatever

$form = new \MyModule\Form\InstituteEditForm();
$form->setInputFilter(new InstituteInputFilter());

// bind the default values belong to this form
$form->bind($defaultValues);

if( $this->getRequest()->isPost() )
{
    // ok post now setup the post values to the form
    $form->setData($this->getRequest()->getPost());

    if( $form->isValid() )
    {
        $validatedFormData = $form->getData();

        // update entity in db or whatever
        // $db->update($validatedFormData);
        // success messages, redirect...

    } else {

        // uuppps some fields contain errors
        $form->populateValues($this->getRequest()->getPost());

        // get all form errors
        $errorMessages = $form->getMessages();
    }
}

答案 1 :(得分:0)

我发现,默认情况下,ZF2.3.1中有一个设置可以附加InputFilter,这样任何表单元素都可以简单地传递它,尽管我没有定义任何验证。 简单地设置$form->setUseInputFilterDefaults(false)会产生我期望的行为:只有那些我附加了输入的表单元素,才可以通过验证。因此,$form->getData未返回未经验证的数据。