Php 如何在post中的数组InputFilter中使用验证器?
我有一个输入类型为class='text'name='article[]'的表单。 我不知道可以发布的文章数量,因为有一个小小的javascript按钮,我可以在其中添加我想要的内容,输入name=article[] 目前,我使用Zend\InputFilter\InputFilter,但验证器从未在我的$\u文章中获得数组上的值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
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');
}
}