1

目前,我正在使用 TWIG 显示我的所有信息(文章和评论)。所以,我首先从我的数据库中检索文章和评论并将其传递到一个数组中。然后将其传递到我的树枝模板中。然后,我加载每篇文章,并在每篇文章的下方加载该文章的评论。这些评论和与之相关的按钮(又名新评论按钮)都是在我的宏中创建的。

宏只获取包含我需要显示的注释的数组。它显示文章的评论,并为每条评论创建一个回复按钮,因此用户可以回复任何评论或开始一个新线程。

我使用 AJAX 和 jQuery 将新评论存储在我的数据库中,而无需刷新页面。但是,我需要想办法在刷新整个页面的情况下显示新评论。有人知道如何在 TWIG 中执行此操作吗?

我现在使用 TWIG 面临的问题是如何异步发布评论。我最初在加载页面时加载了当前评论数据库的数组。但是,如果我的数据库更新,我如何用它更新我的数组。有什么建议么?每当添加新评论时,我都在考虑抓取我的数组,这就是为什么我的问题是“如何在 TWIG 模板中检索数组?” ,但我愿意接受其他建议。

4

1 回答 1

0

您的问题不是 twig 问题,twig only 是一个模板引擎,仅用于页面的初始渲染。当您从 ajax 保存成功响应时,您应该做的是使用 jquery 创建一个新的 DOM 元素并使用相同的模式将其添加到页面中。就像是:

<script>
$.post(
    TheUrlThatYouPostTo,
    TheDataThatYouPassWithThePost,
    function(returnData, textStatus){
        //assuming that your return data is an array conatianing a boolean successful key
        if(returnData.successful){
            $('#YourCommentsWrapperElement').append('<div class="comment">#some other elements containing the posted values</div>');
        }
    }
);

</script>

或者,如果您希望 twig 为您生成评论 HTML 并且您不想将其硬编码到您的 javascript 中,您可以让您通过 AJAX 帖子发布到的控制器操作返回评论的渲染版本。像这样的东西:

#Your Controller file
public function ajaxPostAction(Request $request){

    //Handle post data to create a new commentObject

    return array(
        'comment' => $commentObject
    );
}

然后为该操作创建一个视图文件:

#your view for the controller action ajaxPost.html.twig
<div class="comment">
    <h3>{{comment.author}}</h3>
    <p>{{comment.content}}</p>
</div>

然后您的 javascript 将只获取返回数据并将其附加到现有列表中:

<script>
$.post(
    TheUrlThatYouPostTo,
    TheDataThatYouPassWithThePost,
    function(returnData, textStatus){
        //Now your return data is the HTML for the new comment so just append it to the rest
        $('#YourCommentsWrapperElement').append(returnData);
    }
);

</script>
于 2013-03-29T23:17:01.197 回答