Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.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
Php 如何在post中的数组InputFilter中使用验证器?_Php_Html_Zend Framework2 - Fatal编程技术网

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

Php 如何在post中的数组InputFilter中使用验证器?,php,html,zend-framework2,Php,Html,Zend Framework2,我有一个输入类型为class='text'name='article[]'的表单。 我不知道可以发布的文章数量,因为有一个小小的javascript按钮,我可以在其中添加我想要的内容,输入name=article[] 目前,我使用Zend\InputFilter\InputFilter,但验证器从未在我的$\u文章中获得数组上的值 My input : <input name="article[]" class="form-control input-md" type="text" &g

我有一个输入类型为class='text'name='article[]'的表单。 我不知道可以发布的文章数量,因为有一个小小的javascript按钮,我可以在其中添加我想要的内容,输入name=article[]

目前,我使用Zend\InputFilter\InputFilter,但验证器从未在我的$\u文章中获得数组上的值

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',                       
                ),
            ),            
        ));
    }
}
我的输入:
我的输入过滤器:
类ArticleFormFilter扩展了InputFilter{
公共函数构造(){
$this->add(数组)(
“名称”=>“文章[]”,
“必需”=>true,
'过滤器'=>阵列(
排列(
'name'=>'Zend\Filter\StripTags',
),
排列(
'name'=>'Zend\Filter\StringTrim',
),
),
“验证程序”=>数组(
排列(
'name'=>'NotEmpty',
),
),            
));
}
}

如果我只使用一篇文章,使用article而不是article[],而不使用Javascript,那么它当然可以工作

首先,字段名应该是“article”而不是“article[]”

当您更改它时,您将发现另一个问题:

Warning: Zend\Filter\StripTags::filter expects parameter to be scalar, "array" given; cannot filter
恐怕Zend 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');
    }
}