我正在学习如何在Symfony2中创建一个基本博客,并且在添加评论系统时已经停滞不前。
到目前为止,我可以查看博客条目。在一篇博文中,我使用Twig直接从Controller中呈现表单:
{% render "PaulDemoBundle:Default:addComment" with { 'id': blog_entry.id } %}
正如您所看到的,我正在使用正在查看的博客的ID填充ID,以便我能够正确地将评论附加到博客条目。
以下是我的控制器中的操作:
public function addCommentAction(Request $request, $id)
{
$add_comment = new Comment();
$add_comment->setBlogId($id);
$form = $this->createFormBuilder($add_comment)
->add('blog_id', 'hidden')
->add('author', 'text')
->add('comment', 'textarea')
->getForm();
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
$comment = $form->getData();
$em = $this->getDoctrine()->getEntityManager();
$em->persist($comment);
$em->flush();
return $this->redirect($this->generateUrl('_index'));
}
}
return $this->render('PaulDemoBundle:Default:add_comment.html.twig', array('form' => $form->createView(), 'id' => $id));
}
在这里你可以看到Controller可以获取Request数据和blog_id($ id)。使用包含blog_id的隐藏字段生成表单。
查看表单HTML源代码,您可以:
<form action="/Symfony/web/app_dev.php/add_comment/3" method="post" >
<div id="form">
<input type="hidden" id="form__token" name="form[_token]" value="d4adb511709259d0df921a0a1b969cee0df83630" />
<input type="hidden" id="form_blog_id" name="form[blog_id]" value="3" />
<div><label for="form_author" class=" required">Author</label><input type="text" id="form_author" name="form[author]" required="required" value="" /></div>
<div><label for="form_comment" class=" required">Comment</label><textarea id="form_comment" name="form[comment]" required="required"></textarea></div></div>
<input type="submit" />
再次,您可以看到blog_id已通过(3)。
现在,填写作者和评论并点击提交,我收到一个错误。似乎认为blog_id是NULL。我已经完成了一个var_dump(并注释掉了持久化的东西),表单请求数据显示blog_id设置为3。
我甚至将$ id强制转换为(int),因为表单数据将其显示为字符串(这不应该是一个问题,因为当它持久保存到数据库时应该成为INT。
有人能看到问题吗?
基本上我有一个M:1评论:博客关系,我需要以某种方式告诉应用程序正在查看什么博客并传递ID(我正在做的atm,但它已经破坏了!)
编辑:var_dump:
object(Paul\DemoBundle\Entity\Comment)#67 (6) {
["id":"Paul\DemoBundle\Entity\Comment":private]=> NULL
["blog_id":"Paul\DemoBundle\Entity\Comment":private]=> string(1) "3"
["blog":"Paul\DemoBundle\Entity\Comment":private]=> NULL
["author":"Paul\DemoBundle\Entity\Comment":private]=> string(8) "Mr Jones"
["comment":"Paul\DemoBundle\Entity\Comment":private]=> string(4) "test"
["created":"Paul\DemoBundle\Entity\Comment":private]=> NULL }
答案 0 :(得分:0)
终于搞清楚了。只需通过GetRepository获取博客条目,并使用它将评论和博客链接在一起。