私のアプリケーションでは、いくつかのフォームフィールドがあり、多くのオプションがあります。私が経験した問題はthis questionと似ています。すべてのページロード時にすべてのオプションを取得して解析するのは高価です(Twigはすべてのオプションを何度も何度もレンダリングしますが、クライアントサイドキャッシュは使用できません)。この問題は、AJAX経由でブラウザにオプションを送信する方法を作りました。簡単なアプローチ:「Ajaxified」フォームの作成フィールドタイプ
- 可能であれば、AJAX(例:/countries.jsonを取得)とキャッシュを使用してすべてのオプションを取得します(キー値)。 (この場合、国名が頻繁に変更される可能性はあまりありません)
- DOMにオプションを挿入するには、selectize、select2などのプラグインを使用します。
- は、すべてのオプションを照会からsymfonyのを防ぐために
:-)速くフォームをお楽しみいただけます(不要:彼らは、AJAX経由で読み込んでいる)オプションを追加することにより、(フォームがロードされたとき、私はQueryBuilder
にsetMaxResults(0)
を追加しましたコントローラを介して)。はい、それはクルージングです。フォームを送信するときには、選択したオプションが存在するかどうかを検証し、制約をチェックする必要があるため、依然としてクエリが実行されます。
この機能を現在のEntityType
に追加するcustom Form Field Typeを作成します。フォームのレンダリング中にオプションを読み込まず、選択したオプションが存在するかどうかを確認します。 dynamically modifying a formに関連するmanyexamplesが見つかりましたが、親フォームとは独立して1つのフォームフィールドのみを変更することに関する例は見つかりませんでした。
このようなフォームフィールドタイプを作成するにはどうすればよいですか?何が良い出発点ですか? EntityType
、ChoiceType
、または他の方法を拡張しますか?
私は既にSymfony 3.1を使用していますので、lazy loading of form choices(Symfony 3.2の新機能)を使用しても問題はありません。この新しい機能が私の問題に関連しているかどうかは不明です。
[EntityTypeを拡張してAJAX呼び出しで余分な選択を可能にする]の可能な複製(http://stackoverflow.com/questions/30178424/extending-entitytype-to-allow-extra-choices-set-with-ajax-calls) ) – Alsatian