Symfony2 - 博客&评论系统 - 如何坚持评论

时间:2011-08-22 10:30:58

标签: php symfony

我正在学习如何在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 } 

1 个答案:

答案 0 :(得分:0)

终于搞清楚了。只需通过GetRepository获取博客条目,并使用它将评论和博客链接在一起。