如何在post上的数组中使用InputFilter中的验证器?

时间:2014-03-26 14:55:03

标签: php html zend-framework2

我有一个输入类型=' text'命名='文章[]' 。 我不知道可以发布的文章数量,因为有一个小的javascript按钮,我可以添加尽可能多的输入名称=文章[]

现在,我使用Zend \ InputFilter \ InputFilter,但验证器永远不会在我的$ _POST中获取数组的值。

My input : 
<input name="article[]" class="form-control input-md" type="text" >         


My InputFilter :
class ArticleFormFilter extends InputFilter{
    public function __construct()    {

    $this->add(array(
            'name'       => 'article[]',
            'required'   => true,
            'filters' => array(
                array(
                    'name'    => 'Zend\Filter\StripTags',
                ),
                array(
                    'name'    => 'Zend\Filter\StringTrim',
                ),
            ),
            'validators' => array(
                array(
                    'name' => 'NotEmpty',                       
                ),
            ),            
        ));
    }
}

如果我只使用一篇文章,使用文章而不是文章[]并且没有Javascript,它当然有用。

2 个答案:

答案 0 :(得分:2)

要验证和/或过滤POST数据数组,请使用CollectionInputFilter:

class MagazineInputFilter extends \Zend\InputFilter\InputFilter
{
    public function __construct()
    {            
        $this->add(new \Zend\InputFilter\Input('title'));        
        $this->add(new ArticlesCollectionInputFilter(), 'articles');
    }
}

class ArticlesCollectionInputFilter extends \Zend\InputFilter\CollectionInputFilter
{
    public function __construct()
    {
        // input filter used for each article validation. 
        // see source code of isValid() method of this class
        $inputFilter = new \Zend\InputFilter\InputFilter();

        /* 
        add inputs and its validation/filtration chains
        */

        $this->setInputFilter($inputFilter);
    }
}

或者设置用于收集杂志主输入过滤器内的输入过滤器:

class MagazineInputFilter extends \Zend\InputFilter\InputFilter
{
    public function __construct()
    {
        $articles = new \Zend\InputFilter\CollectionInputFilter();
        $articlesInputFilter = new \Zend\InputFilter\InputFilter();
        /*
        add inputs and its validation/filtration chains
         */
        $articles->setInputFilter($articlesInputFilter);

        $this->add(new \Zend\InputFilter\Input('title'));        
        $this->add($articles, 'articles');
    }
}

答案 1 :(得分:0)

首先,字段名称应为&#34; article&#34;不是&#34;文章[]&#34;。

当你改变它时,你会发现另一个问题:

Warning: Zend\Filter\StripTags::filter expects parameter to be scalar, "array" given; cannot filter

AFAIK Zend 2过滤器不适用于数组......有些答案在这里: Zend Framework 2 filter / validate array of contents