将当前用户添加到Symfony提交的表单中

时间:2016-12-24 01:48:44

标签: doctrine-orm symfony symfony-forms

这是我的Post实体的一部分:

/**
 * @ORM\ManyToOne(targetEntity="User", inversedBy="post")
 * @ORM\JoinColumn(name="user", referencedColumnName="id")
 */
 private $user;

并从用户实体:

/**
 * @ORM\OneToMany(targetEntity="Post", mappedBy="user")
 */
 private $post;

我的控制器看起来像这样:

$post = new Post();

$form = $this->createForm('FreeCycler\UserBundle\Form\PostType', $post);
$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {
    $post->setUser($this->getUser());

    // also tried this:
    //$post->setUser($this->getUser()->getId());

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

    return $this->redirectToRoute('my_post_show', array('id' => $post->getId()));
}  

帖子会保存到orm,但用户为空或null。 $this->getUser(),但不是空的,如果我转储它,它会显示用户对象。

1 个答案:

答案 0 :(得分:1)

从flush方法中删除$post参数。否则,Doctrine不会刷新用户对象。提供实体迫使Doctrine仅刷新该实体而不刷新其他实体。此外,您的关系是双向的,因此无需刷新$user,它也不会起作用。实际上,flush()方法可能会在将来从Doctrine中删除此功能。

只需$em->flush()

Discussion of this issue on Doctrine's Github repo