我有一个说有10个属性的模型,我为每个属性指定了输入过滤规则。我想创建一个\Zend\Form\Form
对象,该对象应仅用于这10个字段的子集(比如其中5个)。我遇到的问题是,当我执行\Zend\Form\Form::bind()
时,所有10个字段的输入过滤规则都被拉入,并且由于表单中没有5个字段,因此验证结果为false(尽管自出现以来零错误消息)形式没有它们)。
我知道有几个方法可以解决这个问题,但是我想维护模型中每个字段的过滤器和验证规则,因此无论表单是什么,我都使用相同的过滤和验证规则自动采用。我对ZF2还是比较新的,所以除了我将在下面列出的选项外,我真的想问是否还有其他方法可以做到这一点。
\Zend\Form\FormInterface
实现,以防止“复制”inputfilter。非常感谢!
注意:我尝试使用我的模型对象中的InputInterface
仅使用表单工厂中的\Zend\Input\InputFilter::get('FieldNameHere')
,但是\Zend\Form\Form::bind()
1}}只是覆盖它。
答案 0 :(得分:1)
您可以使用validation groups选择要在表单验证中包含哪些元素。
来自文档:
有时您只想验证表单元素的子集。例如,假设我们通过Web服务重新使用我们的联系表单;在这种情况下,Csrf,Captcha和submit按钮元素不感兴趣,不应该被验证。
Zend \ Form为底层的InputFilter的setValidationGroup()方法提供了一个代理方法,允许我们执行此操作。
$form->setValidationGroup('name', 'email', 'subject', 'message');
$form->setData($data);
if ($form->isValid()) {
// Contains only the "name", "email", "subject", and "message" values
$data = $form->getData();
}