1

我正在尝试创建一个抽象类来管理输入验证 - 在这个类中,我有返回 InputFilterInterface 对象的静态函数,然后我可以将这些对象添加到处理数据的模型类中的接口中。然而,即使数据是有效的,似乎也没有任何数据经过验证。顺便说一句,我没有使用表单——数据是通过 Ajax 而不是 HTML 表单输入的。

这是我的代码:

中央图书馆:

abastract class InputFilters {
    public static function monthIDFilter($fieldName = 'monthID', $required = FALSE) {
        $factory = new InputFactory();
        return $factory->createInputFilter(array(
            $fieldName => array(
                'name' => $fieldName,
                'required' => $required,
                'validators' => array(
                    array('name' => 'not_empty'),
                    array('name' => 'string_length', 'options' => array(
                        'min'=>'6', 'max'=>'6'
                    )),
                    array('name' => 'regex', 'options'=>array(
                        'pattern' => '/^[0-9]{6}$/'
                    ))
                ),
            )
        ));
    }
}

模型:

class DataModel implements \Zend\InputFilter\InputFilterAwareInterface {
    protected $_inputFilter;

    public function __construct()
    {
        $this->setInputFilter(InputFilters::monthIDFilter());
    }

    public function setInputFilter(InputFilterInterface $inputfilter)
    {
        if(!$this->_inputFilter) {
            $this->_inputFilter = new InputFilter();
        }
        $this->_inputFilter->add($inputfilter);
    }

    public function getInputFilter()
    {
        if(!$this->_inputFilter) {
            $this->_inputFilter = new InputFilter();
        }
        return $this->_inputFilter;
    }
}

最后,在控制器中:

public function dataAction()
{
    $model = new DataModel();
    $inputFilter = $model->getInputFilter();
    $inputFilter->setData($_REQUEST);
    print_r($_REQUEST);
    print_r($inputFilter->getValues());
    if ($inputFilter->isValid()) {
        if ($inputFilter->has('monthID')) {
            echo $inputFilter->getValue('monthID');
            $formMonth = $inputFilter->getValue('monthID');
        } else {
            echo 'nope';
            $formMonth = '';
        }
        $grid->setSqlString($formMonth);
        $data = $grid->outputData();
        Json::out($data);
    }

在我的输出中,我看到包含我的 monthID (201212) 的输入和一个应该是验证结果的数组: Array ( [] => Array ( [monthID] => ) ) 和单词 'nope' 表示有('monthID') 检查失败。

关于我哪里出错的任何建议?

4

1 回答 1

0

尝试在 DataModel 中将 createInputFilter 更改为 createInput。

    return $factory->createInput(array(
        $fieldName => array(
            'name' => $fieldName,
            'required' => $required,
            'validators' => array(
                array('name' => 'not_empty'),
                array('name' => 'string_length', 'options' => array(
                    'min'=>'6', 'max'=>'6'
                )),
                array('name' => 'regex', 'options'=>array(
                    'pattern' => '/^[0-9]{6}$/'
                ))
            ),
        )
    ));
于 2013-01-16T15:40:26.983 回答