3

私は新しいプロジェクトにSymfony2を使用していて、かなりばかげた問題に遭遇しました。

私は2つの教義エンティティItemとCommentの間にOneToMany関係を持っています。これで、ユーザーが特定のアイテムに新しいコメントを作成するためのフォームができました。新しいコメントを作成する場合、このコメントにはもちろんプロパティItemがあり、これは現在コメントされているアイテムに設定する必要があります。

IDがフォームページにパラメーターとして送信されるアイテムのコメントリンクをクリックすると、このIDが非表示フィールドに入力され、データトランスフォーマーを使用してポストバック時にアイテムに変換されるようにする予定でした。

しかし、実際にこれを機能させるにはどうすればよいですか?このIDをフォームの非表示フィールドに入れて、Data Transformerで適切に処理できるようにするにはどうすればよいですか?または、Symfony2でフォームを使用するときにそのような関係を処理するためのより良い/より正しい方法はありますか?

4

2 に答える 2

3

これには隠しフィールドは必要ありません。アクションは、ユーザーがコメントしているアイテムを認識している必要があるため、コメントにアイテムを設定できます。

/**
 * @Route("/item/{id}/comment")
 */
public function commentAction(Item $item)
{
    $comment = new Comment;
    $comment->setItem($item);

    $form = $this->createForm('item_comment', $comment);

    // ...
}
于 2012-09-16T14:31:44.310 に答える
1

データトランスフォーマーは必要ありません。「アイテム」プロパティのフォーム フィールドを作成し、非表示に設定するだけです。何かのようなもの

    $item = $this->getDoctrine()
    ->getRepository('AcmeDemoBundle:Item')
    ->find($id);

    $comment = new Comment();
    $comment->setItem($item);

    $form = $this->createFormBuilder($comment)
            ... //add some fields
            ->add('item', array('hidden'=>true));
            ->getForm();

フォームを受け取ってバインドすると、Comment オブジェクトの「item」プロパティが正しく設定されます

于 2012-09-16T11:18:16.343 に答える