0

FormType でこれを使用しています

->add('Task', 'entity', array(
                 'class' => 'Task',
                 'query_builder' => function(EntityRepository $er) use ($options) {
                                     return $er->createQueryBuilder('t') 
                                     ->where('t.id = :id')
                                     ->setParameter('id',$options['id'])

それが機能するためには、コントローラーのフォームタイプにIDを渡す必要があります

$form = $this->createForm(new TaskType(), $task,array('id' => $id));

これで、すべてのオプションでフォームが正常に表示されます。newActionしかし、同じことを controller の機能にも入れる必要があることを忘れていました。

また、 EditAction と Update アクションにも同じものを入れる必要があります

つまり、それを 4 か所で繰り返さなければならないということです。

また、 を計算する 4 つの行がある場合は、$idこれらすべての手順を 4 つの場所で繰り返す必要があります。

その上、フォームを編集すると、選択ボックスで選択が事前に選択されません。

次に、編集フォームに表示する前に、最初にオブジェクトを設定する必要がありました。

しかし、このようなクエリなしでこれを使用すると

->add('user')

その後、編集機能も問題なく動作します。

私は何か間違ったことをしていますか

4

1 に答える 1

1

newActionidに存在することは、ユーザーに依存せず、URLから取得されないと思います。その場合:

ケース 1: ID が URL から取得されない:

解決策 1: entityManager をフォームに直接挿入し、フォームでロジックを実行して、コントローラーでこれを繰り返す必要がないようにします。

1-フォーム内でロジックを直接実行します。idコンストラクターでユーザーを取得するために必要なサービスを追加します。

2- フォームをサービスとして宣言し、直接取得するために必要なサービス (通常は entityManager) を注入しますid

解決策 2: エンティティ マネージャーでロジックを生成します。を受け取ってフォームを作成する関数を作成idします。このようにして、異なるコントローラーで常に同じ関数を使用しています。

ケース 2: ID は URL から取得されます。

URL から取得した場合でも、オプションで ID を渡すか、コンストラクターで ID を渡す必要があります。オプションとして id を渡すことは、必ずしもコードを繰り返すことを意味するわけではありません。それは必要になるだけなので、やらなければなりません。

于 2012-08-24T07:40:20.580 に答える