如何使用twig递归显示注释?

时间:2015-01-21 13:11:13

标签: php twig silex

我正在使用Silex框架重写应用程序。在此应用程序中,用户可以评论帖子和评论。在受this question启发的非MVC应用程序中,我这样写了:

function display_comments($postid, $parentid=0, $level=0){
   // Get the current comment from DB and display with HTML code
   display_comments($needid, $comment['id'], $level+1);
}

但是,在Silex应用程序中,我想从存储库中的数据库中检索它们,将它发送到控制器中的twig-template,最后在模板中显示HTML代码。这使得以前的解决方案不兼容。

Silex中这个问题的解决方案是什么?我在视图中放置了什么,控制器中有什么以及模型中有什么?

修改 我现在在控制器中编写了这个函数:

$app->get('/needdetail/{id}', function ($id) use ($app) {
    $need = $app['need']->findNeed($id);

    function display_comments($app, $needid, $comments=array(), $parentid=0, $level=0){
       $replies = $app['comment']->findByNeed($needid, $parentid);
       foreach($replies as $reply){
            $reply['level'] = $level;
            array_push($comments, $reply);
            display_comments($app, $needid, $comments, $reply['id'], $level+1);
       }
       return $comments;
    }

    return $app['twig']->render('needdetail.html', array('need' => $need, 'comments' => display_comments($app, $id)));
})

现在显示0级评论,但更深层次不是。

1 个答案:

答案 0 :(得分:2)

我设法通过稍微不同的方法获得所需的结果。控制器和视图包含递归函数:

<强>控制器:

$app->get('/needdetail/{id}', function ($id) use ($app) {
   $need = $app['need']->findNeed($id);

   function get_comments($app, $needid, $parentid=0){
      $comments = array();
      $replies = $app['comment']->findByNeed($needid, $parentid);
      foreach($replies as $comment){
         $comment['replies'] = get_comments($app, $needid, $comment['id']);
         array_push($comments, $comment);    
      }
      return $comments;
   }

   return $app['twig']->render('needdetail.html', array('need' => $need, 'comments' => get_comments($app, $id)));
})

查看:

{% for comment in comments %}
   {% include 'comment.html' with {'level': 0} %}            
{% endfor %}

<强> Comment.html:

<div class="comment">
   //Comment HTML
</div>
{% if comment.replies %}
   {%for reply in comment.replies %}
      {% include 'comment.html' with {'comment': reply, 'level': level+1} %}
   {% endfor %}
{% endif %}