Symfony2 OneToMany关系-通过隐藏表单字段获取对象


Symfony2 OneToMany Relation - get object via hidden form field?

我目前正在Symfony开发一个小网站,访问者可以在那里评论人道主义项目。一个项目可以有多个注释(oneToMany关系)。

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

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

现在,如果有人创建一个评论,我需要分配当前显示的项目。项目通过路由显示:

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

下面是注释的create Controller:

 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放在route中(因此也可以作为action参数)。

但是我仍然在努力使项目对象将其分配给注释。选项1如何运作?我如何得到当前项目进入隐藏字段的形式?

谢谢了!

试试这个:

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

在表单模板中添加:

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