2011-02-26 5 views
0

基本的に私のモデルでは、オブジェクトが物理的な場所に結び付けられている必要があります。このために、テキストフィールドでユーザーが入力したキーワードを使用してAJAX経由でAPIから場所を取得しています.jQueryオートコンプリートは、ユーザーが推奨する有効な場所を選択すると、隠しフィールドを一意のIDに設定します。検証の失敗に基づいてSymfonyフォームフィールドを追加するにはどうすればいいですか?

これは、ユーザーがJavaScriptを持っていて場所をクリックしたと仮定すると、すべて問題ありません。

私はフォールバックを実装する必要があります。つまり、フォームに非表示フィールドに値が設定されていない状態でフォームを送信する場合は、フォームには表示されているものを使用してAPIをクエリし、の値を選択します。

私は追加する必要のあるコードをよく知っていますが、どこにバインドするのかは分かりません。

答えて

0

カスタムウィジェットを作成し、ロケーションフォームフィールドの代わりに使用する必要があります。ウィジェットのレンダリングにjavascriptを追加することができます。 sfWidgetChoiceまたはdoctrineを拡張すると、デフォルトで選択ボックスになります。 jsが有効になっていると、ウィジェットのjsが自動的にフィールドを書き換えます。

これを行う方法のいくつかの素晴らしい例については、sfFormExtraPluginをご覧ください。

+0

あなたが私の質問を完全に読んでいるかどうかはわかりませんが、私はすでにあなたが提案したことのすべてを行っています。それは私が現在苦労していることから進んでいます。 – Steve

+0

私が言っているのは、あなたのウィジェットは、デフォルトでfallback要素であるべきです。次に、js(または何でも)が有効になっている場合にのみ、要素がオートコンプリートになります。プログレッシブ・エンハンスメントと呼ばれています。http://www.alistapart.com/articles/understandingprogressiveenhancement/ – xzyfer

+0

または、優雅な劣化(http://dev.opera.com/articles/view/graceful-degradation-progressive-enhance/)を使用できます。機能がサポートされていない場合(javascriptなど)、デフォルトで自動的に(つまり自動完成され)、それが元に戻ってしまうようにするのが最良だと言います。いずれにせよ、これはあなたのウィジェットの一部でなければならないので、sfFormExtraPluginを見てみることをお勧めしました。ウィジェットでプログレッシブエンハンスメントを使用する方法の素晴らしい例です。 – xzyfer

関連する問題