我正在尝试创建一个抽象类来管理输入验证 - 在这个类中,我有静态函数返回InputFilterInterface对象,然后我可以将其添加到处理数据的模型类中的接口。但是,即使数据有效,也似乎没有任何数据得到验证。顺便说一下,我没有使用Forms - 数据是通过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 '表示has('monthID')检查失败。
关于我哪里出错的任何建议?
答案 0 :(得分:0)
尝试将createInputFilter更改为DataModel中的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}$/'
))
),
)
));