如何使用 Zend\Form\Factory 在 ZF2 字段集中设置过滤器和验证器? [英] How to set filters and validators in ZF2 fieldsets using Zend\Form\Factory?
本文介绍了如何使用 Zend\Form\Factory 在 ZF2 字段集中设置过滤器和验证器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用 Zend\Form\Factory 在 zend framework2 中创建表单
I use Zend\Form\Factory to create forms in zend framework2
$factory = new Zend\Form\Factory();
$factory->createForm(array(
'elements' => array(
array(
'spec' => array(
'name' => 'name',
),
),
),
'input_filter' => array(
'name' => array(
'validators' => array(
// validators for field "name"
),
'filters' => array(
// filters for field "name"
),
),
),
));
您可以看到字段名称"有过滤器和验证器.有用.如果我使用字段集,我会遇到问题:
You can see that there are filters and validators for field "name". It works. I have the problem if I use fieldsets:
$factory->createForm(array(
'fieldsets' => array(
array(
'spec' => array(
'name' => 'common',
'elements' => array(
array(
'spec' => array(
'name' => 'name',
),
),
),
),
),
),
'input_filter' => array(
'name' => array(
'validators' => array(
// validators for field "name"
),
'filters' => array(
// filters for field "name"
),
),
),
));
在这个例子中输入过滤器不起作用.我不知道如何将过滤器和验证器设置为字段集common"中的字段name"
In this example input filter doesn`t work. I don't know how to set filters and validators to field "name" in fieldset "common"
这个例子也不起作用:
$factory->createForm(array(
'fieldsets' => array(
array(
'spec' => array(
'name' => 'common',
'elements' => array(
array(
'spec' => array(
'name' => 'name',
),
),
),
'input_filter' => array(
'name' => array(
'validators' => array(
// validators for field "name"
),
'filters' => array(
// filters for field "name"
),
),
),
),
),
),
));
推荐答案
使用 fieldset 时需要在输入过滤器中指定 'type' 键.
You need to specify 'type' key in input filter when you used fieldset.
$factory = new \Zend\Form\Factory();
$form = $factory->createForm(array(
'hydrator' => 'Zend\Stdlib\Hydrator\ArraySerializable',
'elements' => array(
array(
'spec' => array(
'name' => 'email1',
),
),
),
'fieldsets' => array(
array(
'spec' => array(
'name' => 'common',
'elements' => array(
array(
'spec' => array(
'name' => 'email2',
),
),
),
),
),
),
'input_filter' => array(
'email1' => array(
'validators' => array(
// validators for field "name"
new \Zend\Validator\EmailAddress(),
),
'filters' => array(
// filters for field "name"
array('name' => 'Zend\Filter\StringTrim'),
),
),
'common' => array(
'email2' => array(
'validators' => array(
// validators for field "name"
new \Zend\Validator\EmailAddress(),
),
'filters' => array(
// filters for field "name"
array('name' => 'Zend\Filter\StringTrim'),
),
),
'type' => 'Zend\InputFilter\InputFilter',
)
),
));
$form->setData(array('email1'=>'test@gmail.com','common'=>array('email2'=>'invalid-email')));
if(!$form->isValid()){
print_r($form->getMessages());
}
这篇关于如何使用 Zend\Form\Factory 在 ZF2 字段集中设置过滤器和验证器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文