Zend Framework 3 BaseInputFilter :: setData()抛出InvalidArgumentException

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zend Framework 3 BaseInputFilter :: setData()抛出InvalidArgumentException相关的知识,希望对你有一定的参考价值。

我在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()时会抛出以下异常:ZendInputFilterBaseInputFilter::setData expects an array or Traversable argument; received string

我传递给表单的数据包含以下内容:

object(ZendStdlibParameters)[89]
  private 'storage' (ArrayObject) => 
    array (size=2)
      'entityType' => string 'drivers' (length=7)
      'csrf' => string '0c435d5f0ca21132ce85e26df65d2e5e-daf2a8843f01e607f23ce48a2c209262' (length=65)
      'submit' => string 'Next' (length=7)

entityType是fieldset的一部分。当我将Traversable对象传递给表单时,我不明白为什么会抛出此异常。这个发生在其他人身上吗?我该如何解决?提前致谢!

答案

如果entityType是一个字段集,则无法直接为其设置数据。您必须向其中的元素提供数据。所以,如果我们说你的字段集为;

final class entityType extends Fieldset {
    function init(){
         $this-add([
              'type' => 'Text', 
              'name' => 'my-field'
         ]);
    }
}

数据会像;

'storage' => [
    'entityType' => [
        'my-field' => 'drivers
    ]
]
另一答案

问题真的非常微不足道,让我感到羞耻。我忘了在我的视图脚本中调用$form->prepare。在调用$form->prepare()之后,正确设置了后期数据并且BaseInputFilter接受了数据。

以上是关于Zend Framework 3 BaseInputFilter :: setData()抛出InvalidArgumentException的主要内容,如果未能解决你的问题,请参考以下文章

markdown Zend Framework 3:身份验证

markdown Zend Framework 3:授权和RBAC

markdown Zend Framework 3:Controller插件管理器

如何模拟Zend Form提交而不在Zend Framework 2/3中显示表单?

使用zend-framework3和gettext处理textDomains

markdown Zend Framework 3:RBAC的访问过滤器和访问视图助手