搜索

首页  >  问答  >  正文

“请填写此字段”而不是自定义错误消息 |交响乐5

您好,我有一个 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”并设法获得我的自定义消息“此字段不能为空”。

P粉877719694P粉877719694277 天前419

全部回复(1)我来回复

  • P粉360266095

    P粉3602660952024-03-23 09:28:13

    您混淆了服务器端错误和前端错误。 当您编写 required => true 时,它会将 html 属性 required 应用于您的输入元素。 https://www.w3schools.com/tags/tryit.asp?filename=尝试html5_input_required

    这就是您看到默认浏览器错误的原因。如果您想尝试,可以使用 F12 检查输入的 html 标记并删除所需的内容。

    然后。如果您设法提交表单(将数据发送到服务器)。 Symfony 将应用它自己的约束(你的断言)。

    这就是为什么您的表单正确显示错误的原因,因为您在表单 form_errors 的每个条目上都使用了此函数。

    但在这种情况下,您看到的错误是从服务器返回的。它们不是浏览器错误。

    无论如何,保留 required => true 对 UX(用户体验)有好处。对于完整的用户体验来说,仅显示“动态”错误是一件好事。它可以防止用户在知道自己犯了错误之前被迫提交。

    但是 Symfony 约束也可以保护某人可以提交的内容,这样您就永远不会注册不完整的数据。你可以把它看作“中国墙”。投影项目数据的最后一件事。

    回复
    0
  • 取消回复