Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zend framework2 如何向ZF2中字段集中的元素动态添加验证器和过滤器?_Zend Framework2_Zend Form - Fatal编程技术网

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

Zend framework2 如何向ZF2中字段集中的元素动态添加验证器和过滤器?,zend-framework2,zend-form,Zend Framework2,Zend Form,我在ZF2表单中使用字段集。我可以向元素添加验证器和过滤器: $form->getInputFilter()->add(array( 'name' => 'element_name', 'required' => true, 'filters' => array( array('name' => 'Zend\Filter\StringTrim'), ), )); 但是,如果元素在字段集中

我在ZF2表单中使用字段集。我可以向元素添加验证器和过滤器:

$form->getInputFilter()->add(array(
    'name' => 'element_name',
    'required' => true,
    'filters' => array(
        array('name' => 'Zend\Filter\StringTrim'),
    ),            
));
但是,如果元素在字段集中,我怎么做呢? 我试图这样做:

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

但是它不起作用

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

只需将验证程序直接添加到字段集中,而不是表单中

您应该在Fieldset类中实现getInputFilterSpecification()方法,并使 那里有必需的配置。这是必要的,因为fleldset的表单从引用的fleldset的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
             )
         );
    }
}

您应该在Fieldset类中实现getInputFilterSpecification()方法,并使 那里有必需的配置。这是必要的,因为fleldset的表单从引用的fleldset的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
             )
         );
    }
}

应首选@Fouad Fodail方法。
InputSpecification
应该在
FieldsetClass
本身声明。但是,如果您需要按照您的要求执行此操作,它也很简单:

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

应首选@Fouad Fodail方法。
InputSpecification
应该在
FieldsetClass
本身声明。但是,如果您需要按照您的要求执行此操作,它也很简单:

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

Zend\Form\Fieldset中没有方法getInputFilter()。Zend\Form\Fieldset中没有方法getInputFilter()