4

我的 ZF2 使用我随处可见的简单结构,在模型中设置 inputFilters 并在验证期间应用于表单。但我真的在这里碰壁了。您如何处理一个表单的验证,该表单具有一些需要针对一个模型进行验证的字段和一些需要针对另一个模型进行验证的字段?

我的场景:我正在使用一个表单在我的数据库的 2 个表中插入 2 个条目(添加一个用户,并添加一个链接到该用户的捐赠)。一些字段将放在一个表中,而另一些字段将放在第二个表中。

就像我说的,我的输入过滤器存储在模型级别。

如果我的整个场景只涉及一个模型/表格,例如存储一份捐赠而没有其他内容,我将按照以下方式进行:

$donation = new Donation();

$form->setInputFilter($donation->getInputFilter());
$form->setData($request->getPost());

if ($form->isValid()) {

$donation->exchangeArray($form->getData());
$this->getDonationTable()->saveDonation($donation);

我可以做到以上。

但我正在尝试针对我从 2 个模型收集的两组 inputFilters 分析和验证表单数据。一个用于将用于捐赠模型的数据,另一个用于将用于用户的数据。因此,我追求这样的事情:

$donation = new Donation();
$user = new User();

$form->setInputFilter($donation->getInputFilter());

然后我会添加类似的东西:(显然不存在)

$form->addInputFilter($user->getInputFilter());

所以我可以继续...

$form->setData($request->getPost());

if ($form->isValid()) {

    // add donation
    // add user

我很惊讶我在互联网上没有找到任何关于此的信息,我使用模型和 inputFilters 的方式不正确吗?您如何处理一个表单的验证,该表单具有一些需要针对一个模型进行验证的字段和一些需要针对另一个模型进行验证的字段?

4

1 回答 1

2

Fieldsets (Form Collections) are what you are looking for. Official documentation is here:

https://zf2.readthedocs.org/en/latest/modules/zend.form.collections.html

于 2013-06-06T06:57:56.480 回答