1

我在 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'),
        ),   
    ),                
));

但它不起作用

4

3 回答 3

3

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

$form->getInputFilter()
     ->get('fieldset_name')
     ->get('element_name')
     ->add($additionalFilter);
于 2013-08-23T06:50:45.430 回答
2

您应该在 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
             )
         );
    }
}
于 2013-08-23T01:43:26.677 回答
1

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

于 2013-08-23T00:54:11.113 回答