我在ZF3中有一个动态的逐步表单。我使用fieldsets和默认表单来显示当前表单。默认表单只有一个csrf标记和一个添加的提交按钮。表单实例如下所示:
$form = new ReportForm();
foreach($requestedFieldsetNames as $fieldSetName) {
$form->add([
'type' => $this->registeredFieldSets[$fieldSetName],
'options' => [
'use_as_base_fieldset' => true,
]
]);
}
return $form;
表单显示正确,但是当我提交表单时,当我调用isValid()
时会抛出以下异常:
Zend\InputFilter\BaseInputFilter::setData expects an array or Traversable argument; received string
我传递给表单的数据包含以下内容:
object(Zend\Stdlib\Parameters)[89]
private 'storage' (ArrayObject) =>
array (size=2)
'entityType' => string 'drivers' (length=7)
'csrf' => string '0c435d5f0ca21132ce85e26df65d2e5e-daf2a8843f01e607f23ce48a2c209262' (length=65)
'submit' => string 'Next' (length=7)
entityType是字段集的一部分。当我将Traversable
对象传递给表单时,我不明白为什么会抛出此异常。这个发生在其他人身上吗?我该如何解决?提前谢谢!
答案 0 :(得分:0)
如果entityType
是字段集,则无法直接为其设置数据。您必须向其中的元素提供数据。因此,如果我们将您的字段集称为;
final class entityType extends Fieldset {
function init(){
$this-add([
'type' => 'Text',
'name' => 'my-field'
]);
}
}
数据就像;
'storage' => [
'entityType' => [
'my-field' => 'drivers
]
]
答案 1 :(得分:0)
这个问题真的非常微不足道,让我感到羞耻。我忘了在我的视图脚本中调用$form->prepare
。调用$form->prepare()
后,正确设置了帖子数据,BaseInputFilter
接受了数据。