这是实体中的字段:
/**
* @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中是否有内置功能,或者我应该创建自定义约束吗?
答案 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。