Forms zf2条令表格int要求不工作

Forms zf2条令表格int要求不工作,forms,doctrine-orm,zend-framework2,required,Forms,Doctrine Orm,Zend Framework2,Required,在我的条令实体中,我有一个用于表单验证的getInputFilter方法。上面是其中一个输入元素的代码片段。我的问题是,即使我提交了一个空表单,required=>true也不起作用 经过研究,我发现Int过滤器将空输入转换为0并提交它,这就是所需的验证器无法工作的原因。我只需要解释为什么它可能不起作用 作为我搜索的参考 他建议在验证器之间使用 $inputFilter->add(array( 'name' => 'seatingCapacity', 'req

在我的条令实体中,我有一个用于表单验证的getInputFilter方法。上面是其中一个输入元素的代码片段。我的问题是,即使我提交了一个空表单,required=>true也不起作用

经过研究,我发现Int过滤器将空输入转换为0并提交它,这就是所需的验证器无法工作的原因。我只需要解释为什么它可能不起作用

作为我搜索的参考

他建议在验证器之间使用

$inputFilter->add(array(
    'name'     => 'seatingCapacity',
    'required' => TRUE,
    'filters'  => array(
        array('name' => 'Int'),
    ),
));
我想知道为什么我应该使用Between,为什么required失败。

您应该只使用Between验证器来验证给定值是否在最小值和最大值之间。这与解决空值为0的问题无关

你应该问自己两个问题:

0是有效值吗? 是否要自动将null空字符串和其他空值强制转换为此0? 如果您真的想防止Int过滤器将空值设置为0,那么您可能根本不应该使用此过滤器


您可以改为添加以检查给定值是否为整数。您所需的=>true设置将按预期工作,并且对任何其他非整数输入以及空字符串等的验证将失败。

感谢您的时间、精力和努力。 实际上我解决了这个问题

我已经复制粘贴了代码,在这样做的时候我应该小心

我发现没有名为“Int”的过滤器,实际上是“Digits”

$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,
                )
            )
        )
    )
));
)

显示错误,因为筛选器名称应为“Digits”。 只有这样才能解决我的问题,并按照我的要求工作

$inputFilter->add(array(
'name'     => 'seatingCapacity',
'required' => TRUE,
'filters'  => array(
    array('name' => 'Int'),
),
)

这是正确的方法,我建议您在引用源代码时要小心,因为我犯了一个不合逻辑的错误


快乐编码

感觉您已经回答了自己的问题。。。这就是为什么“必需”验证器不工作的原因我还没有测试过这个东西,所以它只是一个注释而不是一个答案,但是你不能使用过滤器、验证器和验证器的组合吗?谢谢你。非常感谢你的努力。实际上,我没有收到“Value required”错误消息,而我应该担心是否输入了数字。随着时间的推移,我发现0应该是有效值。所以,输入是否为空并不重要,但它不应该包含除数字以外的任何内容。我满足了我的要求。
$inputFilter->add(array(
'name'     => 'seatingCapacity',
'required' => TRUE,
'filters'  => array(
    array('name' => 'Digits'),
),