我使用 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%')
)
)
)
)
)
);
最佳答案
使用 zend validator 的第二个参数来破坏验证器链并返回错误, 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
。 p>
关于validation - Zend Framework Validate 字段是 1 到 5 之间的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17807838/