デフォルトの HTML5 フロントエンド フォーム検証が、作成した Symfony 3 フォームの特定のフィールドに適用されないという問題が発生しています。
フィールド自体は、EntityType クラスの子であるカスタム フィールド タイプのインスタンスです。選択肢は、jQuery を介してこのフィールドに動的に追加できます。これらの変更は、PreSumbmitEvent コールバックで新しい選択肢をフォーム オブジェクトに追加することで、フォーム オブジェクトに反映されます。これはすべて機能します。
私が抱えている問題は、Symfony Forms の生成された選択フィールドを非表示にし、チェックボックスのドロップダウンで構成される複数選択ウィジェットを追加するために使用しなければならない jquery プラグインが原因です。これらのチェックボックスは、ボックスがチェックされると、非表示の select 要素からオプションを動的に選択します。
問題:
select 要素が非表示になっているという事実は、HTML5 フロントエンド検証によって提供されるツール ヒントも非表示にするため、ユーザーがこのフィールドに入力していない場合、フォームはサイレントに失敗します。
どうやら、HTML5 フロントエンド検証はチェック ボックスのグループを検証できないため、HTML5 の組み込みフォーム検証を使用して検証をウィジェットに委譲することはできません。フォーム クラスでウィジェットが定義されていないため、Symfony の「error_mapping」機能を使用しても機能しません。このフィールドに何らかのカスタム フロントエンド検証を実装したいと考えていますが、フィールドが空の場合に JavaScript を使用してフォームの送信を停止する方法がわかりません。
私の質問:
symfony フォームがフロントエンドで送信されないようにするにはどうすればよいですか? Symfony フォームの送信を停止するために HTML5 フロントエンド検証は何を行っていますか? JavaScript を使用してこれを行う方法はありますか?
ご意見ありがとうございます。