首頁  >  問答  >  主體

「請填寫此欄位」而不是自訂錯誤訊息 |交響樂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粉877719694234 天前370

全部回覆(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
  • 取消回覆