広告用のページを作成しています。広告はさまざまなタイプであり、したがってさまざまなデータを持つことができます。たとえば、車両には追加データとしてmake
と があります。model
現在、私はAdvert
すべての広告が必要とするデータを含む 1 つの基本教義エンティティを持っています。さまざまな広告がこのデータを継承します (doctrine2 discriminatormap)
ユーザーが車両広告のオプションを表示することを選択した場合、動的に (ajax および symfony2 フォームを使用して) フォームに入力する必要があります。しかし、エンティティをフォームに変更する必要もありますAdvertVehicle
。
これは可能ですか?symfony2 ホームページのクックブックのエントリを読みました
「フォーム イベントを使用してフォームを動的に変更する方法」: これは、アプリケーションに AJAX コールバックを行うことによって処理する必要があります。そのコントローラーでは、フォームを送信できますが、フォームを処理する代わりに、送信されたフォームを使用して更新されたフィールドをレンダリングするだけです。その後、AJAX 呼び出しからの応答を使用してビューを更新できます。
コントローラーに ajax コールバックを行う方法と、フォームイベントの使用方法は理解していますが、レンダリングされた選択ボックス (たとえば、車両モデルを含む) の応答を取得するにはどうすればよいですか? 新しいAbstractTypeで?またはフォームビルダー?
そして、ユーザーが実際にフォームを送信するときに、選択した広告タイプのエンティティを使用する必要があります。フォームでのユーザーの選択に応じてエンティティを動的に変更できますか?
編集
フォームの継承を確認しました。ありがとうございます。メソッドを拡張しAdvertType
てオーバーライドし、buildForm()
必要な項目を追加する前にAdvertVehicleType
、親メソッドを呼び出します。
詳細説明
すべての広告エンティティには、、、およびprice
が含まれます。一部の広告には、やなど、さらに多くの情報が含まれています。それらは(doctrine2)によって区別されます。description
title
category
make
model
discriminatormap
例:
// -- Entity
class CarAdvert extends Advert {
protected $model;
protected $make;
}
// -- Entity
// -- This uses discriminator mapping
class Advert {
protected $title;
protected $description;
protected $price;
protected $category;
}
cars
ユーザーがエンティティを使用したいカテゴリを選択した場合(検証と永続化のために) ユーザーがハウス ホールド itemcategory を選択した場合 通常のエンティティCarAdvert
を使用したいだけです。Advert
大きな問題の 1 つは、ajax を介して拡張フォームをレンダリングする方法を理解できないことです。この部分のヒントはありますか?ユーザーがカテゴリとして車を選択すると、フォームを更新したい (jQuery/ajax 経由) が、フォームの拡張部分だけを取得して html を応答として返すコントローラーを作成するにはどうすればよいですか (twig を使用せずに)ビューでレンダリングすると、これは可能ですか)?
解決:
以下の回答を参照してください。