zf2 doctrine form int必不可行

时间:2015-05-21 06:12:32

标签: forms doctrine-orm zend-framework2 required

$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失败。

2 个答案:

答案 0 :(得分:0)

您应该只使用Between验证程序来验证给定值是否介于minmax之间。它与解决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'),
),

));

这是正确的方法,我建议你在从你的来源引用代码时要小心,因为这是我犯的错误。

快乐编码