使用集合时如何将条目添加到InputFilter


How do I add an entry to InputFilter when using a Collection?

我想过滤和验证每个项目,并验证整个项目,以检查是否有重复项。集合中有任意数量的文本输入。

    $this->add(array(
        'type' => 'Zend'Form'Element'Collection',
        'name' => 'aliasList',
        'options' => array(
            'label' => 'Alias',
            'count' => 2,
            'allow_add' => true,
            'target_element' => array(
                'type' => 'Zend'Form'Element'Text'
            )
        )
    ));

我试着添加下面的代码,但我的手指交叉得很厉害。这显然不起作用。它希望能有一个像'oneach' = true这样的选择。

    $inputFilter->add($factory->createInput(array(
        'name' => 'aliasList',
        'required' => false,
        'filters' => array(
            array('name' => 'StripTags'),
            array('name' => 'StringTrim'),
        ),
    )));

我还打算为有效的URI添加验证器,并在重复时失败。不幸的是,当我使用ZF2时,我想我会等待很长时间,等待另一个ZF2的u f f e r e r开发人员出现。

在1:1的比例下,这可能对您的问题没有帮助,但您可能希望尝试通过将集合添加为字段集来解决此问题。在的大多数情况下,添加到集合中的任何内容都是不同类型的,因此,根据逻辑,都应该在一个单独的字段集上。

因此,您可能想要尝试这种方法。我想你知道那个博客,以防没有,这里有一个非常有用的链接http://www.michaelgallego.fr/blog/?p=190

 $this->add(array(
    'type' => 'Zend'Form'Element'Collection',
    'name' => 'categories',
    'options' => array(
        'label' => 'Please choose categories for this product',
        'count' => 2,
        'should_create_template' => true,
        'allow_add' => true,
        'target_element' => array(
            'type' => 'Application'Form'CategoryFieldset'
        )
    )
));

通过这种方式,您可以从字段集添加集合元素,并且字段集输入过滤器和验证器将通过添加

public function getInputFilterSpecification() {}

来自Fieldset类。

您可以使用类似于的smt

 $inputFilter = new InputFilter();
 $inputFilter->add($factory->createInput(array(
    'name' => 'aliasList',
    'required' => false,
    'filters' => array(
        array('name' => 'StripTags'),
        array('name' => 'StringTrim'),
    ),
 )));
 $collectionFilter = new CollectionInputFilter();
 $collectionFilter->setInputFilter($inputFilter);