Php 如何为模型属性的子集创建\Zend\Form\Form对象?

Php 如何为模型属性的子集创建\Zend\Form\Form对象?,php,forms,validation,zend-framework2,zend-form,Php,Forms,Validation,Zend Framework2,Zend Form,我有一个模型,它有10个属性,我为每个属性指定输入过滤器规则。我想创建一个\Zend\Form\Form对象,该对象应该只用于这10个字段(比如其中5个)的子集。我遇到的问题是,当我执行\Zend\Form\Form::bind()时,所有10个字段的输入筛选规则都被拉入,并且由于表单没有5个字段,因此验证结果为false(尽管由于表单没有这些字段,因此没有错误消息) 我知道有几个选项可以解决这个问题,但我希望维护模型中每个字段的筛选和验证规则,因此无论使用何种形式,都将自动采用相同的筛选和验证

我有一个模型,它有10个属性,我为每个属性指定输入过滤器规则。我想创建一个
\Zend\Form\Form
对象,该对象应该只用于这10个字段(比如其中5个)的子集。我遇到的问题是,当我执行
\Zend\Form\Form::bind()
时,所有10个字段的输入筛选规则都被拉入,并且由于表单没有5个字段,因此验证结果为false(尽管由于表单没有这些字段,因此没有错误消息)

我知道有几个选项可以解决这个问题,但我希望维护模型中每个字段的筛选和验证规则,因此无论使用何种形式,都将自动采用相同的筛选和验证规则。我对ZF2还比较陌生,所以我想问,除了下面列出的选项之外,是否还有其他方法可以做到这一点

  • 编写我自己的
    \Zend\Form\FormInterface
    实现,防止“复制”inputfilter
  • 具有仅包含此特定表单的字段的模型
  • 重新思考我的数据库设计,以便在我的所有模型和表单之间建立直接的场对场关系是有意义的
  • 非常感谢


    注意:我试图使用
    \Zend\Input\InputFilter::get('FieldNameHere')
    从表单工厂中的模型对象中,仅拉入所需的
    输入接口,但是
    \Zend\Form\Form::bind()
    只覆盖它。

    您可以使用选择表单验证中应包含哪些元素

    从文件中:

    有时,您只想验证表单元素的一个子集。例如,假设我们在web服务上使用联系人表单;在这种情况下,Csrf、Captcha和submit按钮元素并不重要,不应进行验证

    Zend\Form为底层InputFilter的setValidationGroup()方法提供了一个代理方法,允许我们执行此操作


    你应该调查一下。@AlexP这正是我需要的,谢谢。如果你回复我,我会接受。
    $form->setValidationGroup('name', 'email', 'subject', 'message');
    $form->setData($data);
    
    if ($form->isValid()) {
        // Contains only the "name", "email", "subject", and "message" values
        $data = $form->getData();
    }