如何为模型属性的子集创建 \Zend\Form\Form 对象?
How to create a \Zend\Form\Form object for a subset of Model properties?
我有一个模型,其中包含 10 个属性,我为每个属性指定了输入过滤规则。我想创建一个 \Zend\Form\Form
对象,它应该只用于这 10 个字段的一个子集(比如其中的 5 个)。我 运行 遇到的问题是,当我执行 \Zend\Form\Form::bind()
时,所有 10 个字段的输入过滤器规则都被拉入,并且由于表单没有其中的 5 个,验证出现错误(虽然为零错误消息,因为表单没有错误消息)。
我知道有几个选项可以解决这个问题,但我想为模型中的每个字段维护过滤器和验证规则,因此无论表单如何,我都使用相同的过滤和验证规则将自动被采纳。我对 ZF2 还是比较陌生,所以我真的很想问,除了我将在下面列出的选项之外,是否还有其他方法可以做到这一点。
- 编写我自己的
\Zend\Form\FormInterface
实现以防止输入过滤器的 "copying"。
- 有一个模型只包含此特定表单的字段。
- 重新考虑我的数据库设计,以便在我的所有模型和表单之间建立直接的字段到字段关系。
非常感谢!
注意: 我尝试使用表单工厂中的模型对象中的 \Zend\Input\InputFilter::get('FieldNameHere')
仅引入我需要的 InputInterface
, 但 \Zend\Form\Form::bind()
只是覆盖它。
您可以使用 validation groups 选择应包含在表单验证中的元素。
来自文档:
Sometimes you want to validate only a subset of form elements. As an example, let’s say we’re re-using our contact form over a web service; in this case, the Csrf, Captcha, and submit button elements are not of interest, and shouldn’t be validated.
Zend\Form provides a proxy method to the underlying InputFilter‘s setValidationGroup() method, allowing us to perform this operation.
$form->setValidationGroup('name', 'email', 'subject', 'message');
$form->setData($data);
if ($form->isValid()) {
// Contains only the "name", "email", "subject", and "message" values
$data = $form->getData();
}
我有一个模型,其中包含 10 个属性,我为每个属性指定了输入过滤规则。我想创建一个 \Zend\Form\Form
对象,它应该只用于这 10 个字段的一个子集(比如其中的 5 个)。我 运行 遇到的问题是,当我执行 \Zend\Form\Form::bind()
时,所有 10 个字段的输入过滤器规则都被拉入,并且由于表单没有其中的 5 个,验证出现错误(虽然为零错误消息,因为表单没有错误消息)。
我知道有几个选项可以解决这个问题,但我想为模型中的每个字段维护过滤器和验证规则,因此无论表单如何,我都使用相同的过滤和验证规则将自动被采纳。我对 ZF2 还是比较陌生,所以我真的很想问,除了我将在下面列出的选项之外,是否还有其他方法可以做到这一点。
- 编写我自己的
\Zend\Form\FormInterface
实现以防止输入过滤器的 "copying"。 - 有一个模型只包含此特定表单的字段。
- 重新考虑我的数据库设计,以便在我的所有模型和表单之间建立直接的字段到字段关系。
非常感谢!
注意: 我尝试使用表单工厂中的模型对象中的 \Zend\Input\InputFilter::get('FieldNameHere')
仅引入我需要的 InputInterface
, 但 \Zend\Form\Form::bind()
只是覆盖它。
您可以使用 validation groups 选择应包含在表单验证中的元素。
来自文档:
Sometimes you want to validate only a subset of form elements. As an example, let’s say we’re re-using our contact form over a web service; in this case, the Csrf, Captcha, and submit button elements are not of interest, and shouldn’t be validated.
Zend\Form provides a proxy method to the underlying InputFilter‘s setValidationGroup() method, allowing us to perform this operation.
$form->setValidationGroup('name', 'email', 'subject', 'message');
$form->setData($data);
if ($form->isValid()) {
// Contains only the "name", "email", "subject", and "message" values
$data = $form->getData();
}