如何在ZF2中的字段集中为元素添加动态验证器和过滤器?

时间:2013-08-22 23:32:40

标签: zend-framework2 zend-form

我使用ZF2表格中的字段集。我可以为元素添加验证器和过滤器:

$form->getInputFilter()->add(array(
    'name' => 'element_name',
    'required' => true,
    'filters' => array(
        array('name' => 'Zend\Filter\StringTrim'),
    ),            
));

但是如果元素在fieldset中,我怎么能这样做呢? 我试图这样做:

$form->getInputFilter()->add(array(
    'fieldset_name' => array(
        'name' => 'element_name',
        'required' => true,
        'filters' => array(
            array('name' => 'Zend\Filter\StringTrim'),
        ),   
    ),                
));

但它不起作用

3 个答案:

答案 0 :(得分:3)

应该首选@Fouad Fodail的方法。 InputSpecification应在FieldsetClass本身声明。但是,如果你需要这样做,就像你问的那样简单:

$form->getInputFilter()
     ->get('fieldset_name')
     ->get('element_name')
     ->add($additionalFilter);

答案 1 :(得分:2)

您应该在Fieldset类中实现getInputFilterSpecification()方法并制作 那里需要配置。这是必要的,因为fleldset的表单从引用的fleldsets的getInputFilterSpecification()方法接收其所有“InputFilter”规范。

use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilterProviderInterface;

class MyFieldset extends Fieldset implements InputFilterProviderInterface
{
    public function __construct()
    {
       //...
    }

    public function getInputFilterSpecification()
    {
         return array(
             'element_name' => array(
                 'filters' => array(),
                 'validators' => array(),
                 'properties' => array(),
                 'required' => true
             )
         );
    }
}

答案 2 :(得分:1)

只需在字段集中直接添加验证器,而不是在表单中。