我使用Zend \ InputFilter \ InputFilter类进行表单验证。 point 字段应该只接受介于1和5之间的整数。但它不能正常工作它接受以1到5之间的整数开头的字符串。例如1kjhkjh,2tgfjhgfjhf,4jhkljg ... 我的代码出了什么问题?
$inputFilter->add (
$inputFilter->getFactory()->createInput (
array (
'name' => 'point',
'required' => true,
'validators' => array (
array(
'name' => 'Digits'),
array (
'name' => 'Between',
'options' => array (
'min' => 1,
'max' => 5,
'messages' => array('notBetween' => 'Point must be between %min% and %max%')
)
)
)
)
)
);
答案 0 :(得分:3)
使用zend验证器的第二个参数来中断验证器链并返回错误,breakChainOnFailure
(documentation)告诉元素停止验证是否触发了此错误,因此在您的情况下如果它不是用户得到错误的数字,当用户修复错误时,第二个验证器也会被触发:
$inputFilter->add (
$inputFilter->getFactory()->createInput (
array (
'name' => 'point',
'required' => true,
'validators' => array (
array(
'name' => 'Digits', 'breakChainOnFailure' => true),
array (
'name' => 'Between',
'options' => array (
'min' => 1,
'max' => 5,
'messages' => array('notBetween' => 'Point must be between %min% and %max%')
)
)
)
)
)
);
另一种选择是将Zend_Validate_Digits
替换为Zend_Validate_Int
(docmentation),具体取决于您输入非有效数据时您希望向用户提供的错误消息。当然,正如评论中所建议的那样,如果您想要的是通过自己修复它来处理任何无效数据,并且不向用户提供有关他做错了什么的反馈,那么您也可以使用Zend_Filter_Int
。
答案 1 :(得分:0)
'breakChainOnFailure': true
应该是
'breakChainOnFailure'=> true