我有一个输入类型=' 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,它当然有用。
答案 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