【问题标题】:Input validating forms Symfony输入验证表单 Symfony
【发布时间】:2018-07-16 13:19:11
【问题描述】:

我在 Symfony 表单中有一个 Integer 字段,它代表数量 - 当然它应该无法传递等于或小于 0 的值,所以我在 Entity 和 Form 中验证了表单。

但是 - 只有当表单已经发送时才会被验证。是否有任何内置方法来验证输入表单?我知道我可能需要编写自己的 JS 函数来提供这个,但我不想重复别人的工作:)

【问题讨论】:

  • 请显示您的代码和呈现的 HTML。例如在jsfiddle.net/dwhtmu0s 上,如果我输入a 值并提交表单,Firefox 会显示警告。
  • 我知道! :D 但我想知道是否有机会自动生成 JS 代码来验证该表单。
  • 您最好的选择可能是正则表达式。使用正则表达式,您可以检查客户端的输入

标签: php forms symfony validation symfony-forms


【解决方案1】:

找到了解决办法。

要在 HTML 端验证 Symfony 表单,您只需在输入字段中添加一个属性,参考:https://www.w3schools.com/htmL/html_form_attributes.asp

因此,您的表单字段应如下所示:

->add('quantity', IntegerType::class, ['label' => false,
       'constraints' => new GreaterThan(array('value' => 0)),                
       'attr' => array(
            'min'   => '0',
        )
     ])

【讨论】:

  • 您之前也应该添加NotEmpty 约束。默认情况下,如果值为 null,Symfony 验证器会跳过验证。
【解决方案2】:

在您的输入中使用模式和最小值。只要模式不匹配,HTML 就应该阻止表单提交。 (注意,如果你使用 Javascript/Ajax 提交,是不会阻止提交的)

$builder->add('input_name', TextType::class, array(
    'attr'=>array(
        'pattern'=>'^[1-9][0-9]*' // 1 and above
        'min'=>'1'
    )
));

我正在使用 TextType 来删除输入中的箭头。 如果您想保留它们,请使用 NumberType。

【讨论】:

    【解决方案3】:

    一点补充,如果你想确保用户只能输入一个数字,你可以在你的代码中添加这个 js。

    ->add('quantity', NumberType::class, [ 'attr' => 
    [
    'oninput' => "this.value = this.value.replace(/[^0-9]/g, '').replace(/(\..*)\./g, '$1');"
    ] ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-04
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多