Zend framework2 Zend Framework 2 inputfilter错误行为
filterInput的行为非常奇怪,getting filter函数本身就是:Zend framework2 Zend Framework 2 inputfilter错误行为,zend-framework2,zend-form,zend-filter,Zend Framework2,Zend Form,Zend Filter,filterInput的行为非常奇怪,getting filter函数本身就是: public function getInputFilter($id = null){ if (!$this->inputFilter){ $inputFilter = new InputFilter(); $factory = new InputFactory(); $id = intval($id);
public function getInputFilter($id = null){
if (!$this->inputFilter){
$inputFilter = new InputFilter();
$factory = new InputFactory();
$id = intval($id);
$inputFilter->add($factory->createInput(array(
'name' => 'name',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 1,
'max' => 100,
),
),
array(
'name' => 'Db\NoRecordExists',
'options' => array(
'field' => 'name',
'table' => 'table',
'adapter' => $this->dbAdapter,
'message' => 'record exists',
'exclude' => array(
'field' => 'id',
'value' => $id
)
),
)
),
)));
$this->inputFilter = $inputFilter;
}
return $this->inputFilter;
}
将过滤器设置为:
$form->setInputFilter($model->getInputFilter($id));
现在,当我们启动$form->isValid()时,数据库中的重复将导致验证错误,如果我删除Db\NoRecordExists validator,数据库将包含2条记录!更有趣的是,如果我将'required'=>false设置为false,则不会出现双重插入,添加第二个验证字段也是如此。工作环境包括:
public function getInputFilter($id = null){
if (!$this->inputFilter){
$inputFilter = new InputFilter();
$factory = new InputFactory();
$id = intval($id);
$inputFilter->add($factory->createInput(array(
'name' => 'name',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 1,
'max' => 100,
),
),
array(
'name' => 'Db\NoRecordExists',
'options' => array(
'field' => 'name',
'table' => 'table',
'adapter' => $this->dbAdapter,
'message' => 'record exists',
'exclude' => array(
'field' => 'id',
'value' => $id
)
),
)
),
)));
//test field
$inputFilter->add($factory->createInput(array(
'name' => 'id',
'required' => false,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
array('name' => 'Int')
),
)));
$this->inputFilter = $inputFilter;
}
return $this->inputFilter;
}
因此,只有一个字段的筛选器配置无法正常工作。。有人知道原因吗?如果可能,发布控制器/操作,因为复式输入与过滤器无关,除非通过某种机制强制它这样做