您好,我有一個 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粉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 約束也可以保護某人可以提交的內容,這樣您就永遠不會註冊不完整的資料。你可以把它看作「中國牆」。投影項目數據的最後一件事。