Php 如何为模型属性的子集创建\Zend\Form\Form对象?
我有一个模型,它有10个属性,我为每个属性指定输入过滤器规则。我想创建一个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(尽管由于表单没有这些字段,因此没有错误消息) 我知道有几个选项可以解决这个问题,但我希望维护模型中每个字段的筛选和验证规则,因此无论使用何种形式,都将自动采用相同的筛选和验证
\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();
}