Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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
Zend framework2 Zend Framework 2 inputfilter错误行为_Zend Framework2_Zend Form_Zend Filter - Fatal编程技术网

Zend framework2 Zend Framework 2 inputfilter错误行为

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);

filterInput的行为非常奇怪,getting filter函数本身就是:

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;
    }

因此,只有一个字段的筛选器配置无法正常工作。。有人知道原因吗?

如果可能,发布控制器/操作,因为复式输入与过滤器无关,除非通过某种机制强制它这样做