Symfony - 整数类型字段中的十进制数不会导致验证错误

时间:2017-09-01 22:06:31

标签: php symfony validation symfony-forms symfony-validator

这是实体中的字段:

/**
* @Assert\NotBlank(groups={"group1"})
* @Assert\Type(type="integer", groups={"group1"})
* @Assert\Range(min=0, groups={"group1"})
* @ORM\Column(type="integer")
*/
private $cableCount;

,这是表单类型中的相应字段:

$builder->add('cableCount', IntegerType::class, [
     'label' => 'Cable Count',
     'required' => true
]);

使用向上和向下箭头渲染字段,用户可以增加和减少值1,2,3,... 但是,用户也可以输入3.45并提交表格。弹出没有验证错误。只是将值四舍五入为3.预期的行为是获得验证错误,通知用户该字段只能接受整数。

我该如何解决这个问题? symfony中是否有内置功能,或者我应该创建自定义约束吗?

2 个答案:

答案 0 :(得分:2)

Symfony的 lombok IntegerType您发送给它的任何号码。在浏览器方面,如果您使用 IntegerType ,它通常会在您提交表单之前检查有效的整数。

为了得到你想要的东西,你应该使用 automatically round 。然后,您的{%- block number_widget -%} {%- set type = form.vars.attr['int'] is defined and form.vars.attr['int'] ? 'number' : type|default('text') -%} {{ block('form_widget_simple') }} {%- endblock number_widget -%} 将在服务器上运行,如果您提交非整数,则会出错。

唯一的问题是你失去了上/下箭头。如果您需要,则必须使用 NumberType 的自定义表单主题覆盖。像这样:

attr

然后在您的表单类型中,指定$builder->add('cableCount', NumberType::class, [ 'label' => 'Cable Count', 'required' => true, 'attr' => [ 'int' => true, ] ]); ,如下所示:

A = [3-3i 3.2 3.1 2.2212; 2.31-8i 9.9i 0.12i 2.23i;9.1i 9 9.999 0.12;1.2i 1.8i 8 9.0001];

答案 1 :(得分:0)

您可以尝试使用这样的Regex断言:

/** @Assert\Regex(pattern="/^\d*$/") */

编辑:正如@JasonRoman所提到的,您首先必须处理将自动围绕您的输入的IntegerType