こんにちは。フィールドに制約のある Symfony 5 フォームがあります。長さの制約は正常に機能しますが、NotBlank が正しくありません。 「タイプ」フィールドと「ラベル」フィールドがあり、フォームと「タイプ」制約をテストしています。「タイプ」が空のフォームを検証すると、デフォルトのブラウザメッセージ「このフィールドに入力してください」が表示されます。 「NotBlank」制約のエンティティにカスタム メッセージを定義したいと考えています。
この問題は「required => true」によって引き起こされていると思います。これを「false」に変更して「empty_data => ''」を追加すると機能し、カスタムメッセージが表示されますが、正確にはそうではありません。フォームを編集して、「type」フィールドをクリアして検証すると、次のメッセージが表示されます: プロパティ パス「type」で予期されたパラメータ タイプ「string」が「null」を与えます。
私は Symfony 5、Bootstrap 5 を使用しています。これが私のエンティティ、小枝フォーム、FormType.phpです。 ###実在物### リーリー
ツリー形式リーリー
フォームタイプ.phpリーリー ###助けてください!
いくつかのフォーラムを見て、「novalidate」を使用しようとしましたが、同じエラー メッセージが返されました。本当に「required => true」を維持したかったのですが、「このフィールドは null にすることはできません」というカスタム メッセージを取得することができました。
P粉3602660952024-03-23 09:28:13
サーバー側のエラーとフロントエンドのエラーを混同しています。
required => true
と記述すると、html 属性 required
が入力要素に適用されます。 https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_input_required
これが、デフォルトのブラウザ エラーが表示される理由です。試してみたい場合は、F12 を使用して入力された HTML タグを検査し、必要なタグを削除できます。
それから。フォームを送信できた場合 (データをサーバーに送信した場合)。 symfony は独自の制約 (アサーション) を適用します。フォーム form_errors
のすべてのエントリでこの関数を使用しているため、フォームにエラーが正しく表示されるのはこのためです。
ただし、この場合、表示されているエラーがサーバーから返されます。これらはブラウザのエラーではありません。
とにかく、required => true
を維持することは、UX (ユーザー エクスペリエンス) にとって良いことです。完全なユーザー エクスペリエンスを実現するには、「動的」エラーのみを表示することが望ましいです。これにより、ユーザーが間違いを犯したことに気づく前にコミットを強制されるのを防ぎます。
しかし、Symfony の制約は、不完全なデータが登録されないように、誰かが送信できるものを保護することもできます。それは「中国の壁」と考えることができます。最後にプロジェクト データを投影します。