Symfony2 Doctrine Form - 如何在另一个类中获取项目对象?

时间:2014-03-20 16:46:55

标签: symfony doctrine-orm one-to-many

用户可以评论不同的项目(OneToMany关系项目 - >评论)。如果创建了注释,我需要知道哪个用户执行了注释以及执行了哪个项目。我已经知道如何获得当前用户,但我不知道如何获取项目对象。

这是createAction控制器,我现在的问题是,如何访问当前正在显示的项目。

 /**
 * Creates a new Comment entity.
 *
     */
    public function createAction(Request $request)
    {
        $entity = new Comment();


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

        if ($form->isValid()) {
            $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(),
        ));
    }

提前致谢!

我所做的改变:

dbe_comment_create:
pattern:  /project/{id}/comment
defaults: { _controller: "DbeDDDDBundle:Comment:create" }
requirements: { _method: post }

嫩枝:

{{ render(controller('DbeDDDDBundle:Comment:new', { 'id': entity.id})) }}

以下是我收到的错误消息,因为我正在渲染新方法,而不是创建。

An exception has been thrown during the rendering of a template ("Some mandatory parameters are missing ("id") to generate a URL for route "dbe_comment_create".") in DbeDDDDDBundle:Project:show.html.twig at line 305.

1 个答案:

答案 0 :(得分:1)

您还有当前用户的快捷方式:$this->getUser()

至于项目。你桅杆以某种方式传递它。我想到了两种方式。

  1. 将包含项目ID的隐藏字段添加到表单中。
  2. 让您的项目ID在路线中(并因此也作为行动参数)。
  3. 一般来说,我会选择#2,因为它遵循Restful约定。制作create_comment路径:projects/{projectId}/comments POST。

    这样你就可以在你的行动中使用$ projectId参数。