php - 如何使用 Zend\Form\Factory 在 ZF2 字段集中设置过滤器和验证器?

标签 php zend-framework2

我使用 Zend\Form\Factory 在 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"
            ),
        ),
    ),
));

您可以看到字段“name”有过滤器和验证器。有用。 如果我使用字段集,我会遇到问题:

$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”

这个例子也行不通:

$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"
                        ),
                    ),
                ), 
            ),
        ),
    ),       
));

最佳答案

使用字段集时,需要在输入过滤器中指定“类型”键。

$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());
}

关于php - 如何使用 Zend\Form\Factory 在 ZF2 字段集中设置过滤器和验证器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16246049/

相关文章:

php - ZF2 依赖注入(inject)别名和多个实例

javascript - 使用 SSE 获取 mysql select 的响应

php - 数组中的 ucwords 值

php - mysql ajax更新问题

module - ZendDeveloperTools 模块在 ZF2 beta5 中不显示工具栏

php - Zend: fatal error :构造函数 Zend\Stdlib\Glob::glob() 不能是静态的

php - laravel 5.1 中的多级菜单 - 循环

php - 如何从这个多维数组形成 JSON

zend-framework2 - Zend Framework 2 的 gitignore 文件有什么好的例子吗

zend-framework2 - Zend Framework - 使用 Controller 返回图像/文件