您好,我有一个 Symfony 5 表单,对我的字段有约束,我对长度的约束工作得很好,但 NotBlank 不正确。我有一个“类型”和“标签”字段,我正在测试表单和“类型”的约束,如果我用“类型”为空验证表单,它会显示默认的浏览器消息“请填写此字段”而我希望拥有在实体中为“NotBlank”约束定义的自定义消息。
我认为问题是由“required => true”引起的,因为如果我将其更改为“false”并添加“empty_data => ''”,它就可以工作,我可以看到我的自定义消息,但不完全是因为在在我的修改表单中,如果我清空“类型”字段并进行验证,它将出现以下消息:预期参数类型为“字符串”,在属性路径“类型”处给出“空”。
我正在使用 Symfony 5、Bootstrap 5,这是我的实体、我的 twig 表单和我的 FormType.php
实体
/** * @ORM\Column(type="string", length=255) * @Assert\Length( * min = 2, * max = 50, * minMessage = "Le type doit faire au minimum {{ limit }} caractères", * maxMessage = "Le type doit faire au maximum {{ limit }} caractères" * ) * @Assert\NotBlank( * message = "Le type est un champ obligatoire" * ) */ private $type;
树枝形态
{{ form_start(form) }} <div class="container-card-global mb-5"> <div class="form-field"> {{form_label(form.type)}} {{form_errors(form.type)}} {{form_widget(form.type)}} </div> <div class="form-field"> {{form_label(form.description)}} {{form_widget(form.description)}} {{form_errors(form.description)}} </div> <div class="form-field"> {{form_label(form.statut)}} {{form_widget(form.statut)}} </div> <div class="text-center"> <button class="btn btn-save-global">{{ button_label|default('Valider') }}</button> </div> </div> {{ form_end(form) }}
表单类型.php
$builder ->add('type', TextType::class, [ 'required' => true, 'label' => 'Type', ])
请帮忙!
我查看了一些论坛,我尝试使用“novalidate”,但它返回相同的错误消息,我真的很想保留“required => true”并设法获得我的自定义消息“此字段不能为空”。
您混淆了服务器端错误和前端错误。 当您编写
required => true
时,它会将 html 属性required
应用于您的输入元素。 https://www.w3schools.com/tags/tryit.asp?filename=尝试html5_input_required这就是您看到默认浏览器错误的原因。如果您想尝试,可以使用 F12 检查输入的 html 标记并删除所需的内容。
然后。如果您设法提交表单(将数据发送到服务器)。 Symfony 将应用它自己的约束(你的断言)。这就是为什么您的表单正确显示错误的原因,因为您在表单
form_errors
的每个条目上都使用了此函数。但在这种情况下,您看到的错误是从服务器返回的。它们不是浏览器错误。
无论如何,保留
required => true
对 UX(用户体验)有好处。对于完整的用户体验来说,仅显示“动态”错误是一件好事。它可以防止用户在知道自己犯了错误之前被迫提交。但是 Symfony 约束也可以保护某人可以提交的内容,这样您就永远不会注册不完整的数据。你可以把它看作“中国墙”。投影项目数据的最后一件事。