$inputFilter->add(array(
'name' => 'seatingCapacity',
'required' => TRUE,
'filters' => array(
array('name' => 'Int'),
),
));
在我的Doctrine Entity中,我有一个getInputFilter
方法,我用它进行表单验证。以上是其中一个输入元素的代码片段。我的问题是required => true
即使我提交一个空表单也无法正常工作。
经过研究后我发现,Int
过滤器将空输入转换为0
并提交它,这就是required
验证器不起作用的原因。我只是需要理由说明它可能无法正常工作。
供我参考的地方参考
Zend Framework 2 - Integer Form Validation
他建议使用Between
验证器
$inputFilter->add($factory->createInput(array(
'name' => 'zip',
'required' => true,
'filters' => array(
array('name' => 'Int'),
),
'validators' => array(
array(
'name' => 'Between',
'options' => array(
'min' => 1,
'max' => 1000,
)
)
)
)
));
我想知道为什么我应该使用Between
以及为什么required
失败。
答案 0 :(得分:0)
您应该只使用Between
验证程序来验证给定值是否介于min
和max
之间。它与解决0
问题的空值无关。
你应该问自己2个问题:
0
是有效值吗? null
空字符串(''
)和其他空值投放到此0
?如果您确实希望阻止Int
过滤器将空值设置为0
,那么您可能根本不应该使用此过滤器吗?
您可以添加an IsInt
validator来检查给定值是否为整数。您的required => true
设置将按预期工作,并且验证将在任何其他(非整数)输入上失败,因此也会在null,空字符串等上失败。
答案 1 :(得分:0)
感谢您的时间,精力和时间。努力。 其实我解决了这个问题。
我已经复制粘贴了代码,这样做我应该小心。
我发现没有名为'Int'的过滤器,实际上是'Digits'
$inputFilter->add(array(
'name' => 'seatingCapacity',
'required' => TRUE,
'filters' => array(
array('name' => 'Int'),
),
));
显示错误,因为过滤器名称应为“数字”。 只有这样才能解决我的问题并按照我的要求运作。
$inputFilter->add(array(
'name' => 'seatingCapacity',
'required' => TRUE,
'filters' => array(
array('name' => 'Digits'),
),
));
这是正确的方法,我建议你在从你的来源引用代码时要小心,因为这是我犯的错误。
快乐编码