我无法让我的第一个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()返回所有值,而不仅仅是那些附加了输入的值,即它返回未经验证的数据。这应该不是这样的,不应该吗?
非常感谢你!
答案 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
未返回未经验证的数据。