Heim > Fragen und Antworten > Hauptteil
Hallo, ich habe ein Symfony 5-Formular mit Einschränkungen für meine Felder. Meine Längenbeschränkungen funktionieren einwandfrei, aber NotBlank ist falsch. Ich habe die Felder „Typ“ und „Beschriftung“ und teste das Formular und die „Typ“-Einschränkungen. Wenn ich das Formular mit leerem „Typ“ validiere, wird die Standardbrowsermeldung „Bitte füllen Sie dieses Feld aus“ angezeigt und ich Ich möchte eine benutzerdefinierte Nachricht in der Entität für die Einschränkung „NotBlank“ definieren.
Ich denke, das Problem wird durch „required => true“ verursacht, denn wenn ich es in „false“ ändere und „empty_data => ''“ hinzufüge, funktioniert es und ich kann meine Anpassungsmeldung sehen, aber nicht genau, weil in meinem Änderungsformular Wenn ich das Feld „Typ“ lösche und validiere, wird die folgende Meldung angezeigt: Erwarteter Parametertyp „Zeichenfolge“ angegeben im Eigenschaftspfad „Typ“ „Null“.
Ich verwende Symfony 5, Bootstrap 5, hier sind meine Entitäten, mein Twig-Formular und meine FormType.php
Entität
/** * @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;
Baumzweigform
{{ 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) }}
formtype.php
$builder ->add('type', TextType::class, [ 'required' => true, 'label' => 'Type', ])
Bitte helfen Sie!
Ich habe in einigen Foren nachgesehen und versucht, „novalidate“ zu verwenden, aber es gibt die gleiche Fehlermeldung zurück. Ich wollte unbedingt „required => true“ beibehalten und habe meine benutzerdefinierte Meldung „Dieses Feld darf nicht leer sein“ erhalten.
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 约束也可以保护某人可以提交的内容,这样您就永远不会注册不完整的数据。你可以把它看作“中国墙”。投影项目数据的最后一件事。