Symfony2 OneToMany Relation - 通过隐藏表单字段获取对象?

时间:2014-03-21 07:36:28

标签: php symfony doctrine symfony-forms

我目前正在Symfony开发一个小型网站,访客可以在这里评论悍马项目。项目可以有很多注释(oneToMany关系)。

在Project show.html.twig页面上,我正在呈现Comment new form。

{{ render(controller('DbeDonaciBundle:Comment:new')) }}

现在,如果有人创建了评论,我需要将当前显示的项目作为对象。该项目通过以下路线显示:

dbe_project_show:
pattern:  /{id}/{name}/show
defaults: { _controller: "DbeDonaciBundle:Project:showProjectWithDetails" }

以下是评论的创建控制器:

 public function createAction(Request $request)
    {
        $entity = new Comment();


        $form = $this->createCreateForm($entity);
        $form->handleRequest($request);


        if ($form->isValid()) {
            // get current user
            $entity->setUser($this->get('security.context')->getToken()->getUser());

            $em = $this->getDoctrine()->getManager();
            $em->persist($entity);
            $em->flush();

            return $this->redirect($this->generateUrl('dbe_comment_show', array('id' => $entity->getId())));
        }

        return $this->render('DbeDonaciBundle:Comment:new.html.twig', array(
            'entity' => $entity,
            'form'   => $form->createView(),
        ));
    }

我知道有两种选择:

  1. 将包含项目ID的隐藏字段添加到表单中。
  2. 让您的项目ID在路线中(并因此也作为行动参数)。
  3. 但是我还在努力让项目对象将其与评论联系起来。选项1如何工作?如何将当前项目导入隐藏字段表单?

    谢谢!

1 个答案:

答案 0 :(得分:1)

试试这个:

{{ render(controller('DbeDonaciBundle:Comment:new',{'id': app.request.get('id')})) }}

在表单模板中添加:

<input type="hidden" name="id" value="{{ id }}"/>