如何在TWIG模板中更新数组?

时间:2013-03-28 06:24:52

标签: php jquery html ajax twig

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

宏只获取包含我需要显示的注释的数组。它显示文章的注释,并且每个注释都会显示一个回复按钮,因此用户可以回复任何注释或启动新线程。

我使用AJAX和jQuery将新注释存储在我的数据库中而不刷新页面。但是,我需要找到一种方法显示新评论,而无需刷新整个页面。有没有人知道如何在TWIG中做到这一点?

我现在面临的问题是如何异步发布评论。我在加载页面时最初加载当前注释数据库的数组。但是,如果我的数据库更新,我如何用它更新我的数组。有什么建议?我想在添加新评论时抓住我的数组,这就是为什么我的问题是“如何在TWIG模板中检索数组?”,但我对其他建议持开放态度。

1 个答案:

答案 0 :(得分:0)

您的问题不是问题,twig只是一个模板引擎,仅用于页面的初始渲染。您应该做的是当您从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>