我有一个主题论坛,其中每个主题都可以被其他用户评论。我创建的关系是:
class Comment
{
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Topic", inversedBy="comments")
*/
private $topic;
}
课堂主题:
class Topic
{
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Comment", mappedBy="topic")
* @ORM\JoinColumn(name="comment_id", referencedColumnName="id")
*/
private $comments;
}
问题在于,当我创建注释时,comments表中的topic_id列为null。我不确定如何获取当前主题ID并将其设置为注释。这是我在 CommentController 中的 addCommentAction()函数:
/**
* @Route("/comment/add", name="comment_add")
* @param Request $request
* @return \Symfony\Component\HttpFoundation\Response
*/
public function addCommentAction(Request $request)
{
$comment = new Comment();
$form = $this->createForm(CommentType::class, $comment);
$form->handleRequest($request);
if ($form->isValid()) {
$comment->setDateCreated(new \DateTime());
$em = $this->getDoctrine()->getManager();
$em->persist($comment);
$em->flush();
$this->addFlash(
'notice',
'Comment Added Successfully !'
);
}
return $this->render('comments/comment.add.html.twig', array(
'commentsForm' => $form->createView()
));
}
树枝模板中的路径:
<a href="{{ path('comment_add') }}" class="btn btn-lg btn-default">Leave a Comment</a>
答案 0 :(得分:1)
几乎完成:)只需尝试以下
如果主题已存在
$em = $this->getDoctrine()->getManager();
$topic = $em->getRepository('YouBundle:Topic')->find( $topic_id );
if(false === $topic instanceof topic )
{
// not found ...
}
$comment = new Comment();
$comment->setTopic( $topic )
// createForm....
如果没有,而是在DB中查找一个
$topic = new Topic();
$comment = new Comment();
$comment->setTopic( $topic );
UPD:正如@Jakub Matczak所说。您可能需要在表单中添加一个带有topic_id的隐藏字段,因为您不希望获得包含所有可用主题的下拉列表。
在buildForm
方法
$builder->add('topic', HiddenType:class, []);
答案 1 :(得分:1)
您必须在评论实体上设置主题。在您的路由中,您必须添加主题的ID,然后Symfony将自动获取具有ParamConverter的主题实体
这样的事情应该有效:
/**
* @Route("/{id}/comment/add", name="comment_add")
* @param Request $request
* @return \Symfony\Component\HttpFoundation\Response
*/
public function addCommentAction(Request $request, Topic $topic)
{
$comment = new Comment();
$comment->setTopic($topic);
$form = $this->createForm(CommentType::class, $comment);
$form->handleRequest($request);
if ($form->isValid()) {
$comment->setDateCreated(new \DateTime());
$em = $this->getDoctrine()->getManager();
$em->persist($comment);
$em->flush();
$this->addFlash(
'notice',
'Comment Added Successfully !'
);
}
return $this->render('comments/comment.add.html.twig', array(
'commentsForm' => $form->createView()
));
}
答案 2 :(得分:0)
备注: $ form = $ this-&gt; createForm(CommentType :: class,$ comment); 不应该是“评论”?我在您的描述中没有看到任何CommentType类。
此外,您需要在添加新评论时以某种方式传递topicId。 我会为“/ comment / add”做一个POST动作,在主体中我会发送主题id。
//text()[contains(.,'keyword')]
除此之外,当您从客户端执行POST请求时,您还应该发送'topicId'。