6

広告用のページを作成しています。広告はさまざまなタイプであり、したがってさまざまなデータを持つことができます。たとえば、車両には追加データとしてmakeと があります。model

現在、私はAdvertすべての広告が必要とするデータを含む 1 つの基本教義エンティティを持っています。さまざまな広告がこのデータを継承します (doctrine2 discriminatormap)

ユーザーが車両広告のオプションを表示することを選択した場合、動的に (ajax および symfony2 フォームを使用して) フォームに入力する必要があります。しかし、エンティティをフォームに変更する必要もありますAdvertVehicle

これは可能ですか?symfony2 ホームページのクックブックのエントリを読みました

「フォーム イベントを使用してフォームを動的に変更する方法」: これは、アプリケーションに AJAX コールバックを行うことによって処理する必要があります。そのコントローラーでは、フォームを送信できますが、フォームを処理する代わりに、送信されたフォームを使用して更新されたフィールドをレンダリングするだけです。その後、AJAX 呼び出しからの応答を使用してビューを更新できます。

コントローラーに ajax コールバックを行う方法と、フォームイベントの使用方法は理解していますが、レンダリングされた選択ボックス (たとえば、車両モデルを含む) の応答を取得するにはどうすればよいですか? 新しいAbstractTypeで?またはフォームビルダー?

そして、ユーザーが実際にフォームを送信するときに、選択した広告タイプのエンティティを使用する必要があります。フォームでのユーザーの選択に応じてエンティティを動的に変更できますか?

編集 フォームの継承を確認しました。ありがとうございます。メソッドを拡張しAdvertTypeてオーバーライドし、buildForm()必要な項目を追加する前にAdvertVehicleType、親メソッドを呼び出します。

詳細説明 すべての広告エンティティには、、、およびpriceが含まれます。一部の広告には、やなど、さらに多くの情報が含まれています。それらは(doctrine2)によって区別されます。descriptiontitlecategorymakemodeldiscriminatormap

例:

// -- 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 を使用せずに)ビューでレンダリングすると、これは可能ですか)?

解決:

以下の回答を参照してください。

4

1 に答える 1