目前,我正在使用TWIG来显示我的所有信息(文章和评论)。所以,我首先从我的数据库中检索文章和评论并将其传递给数组。然后将其传递到我的树枝模板中。然后,我加载每篇文章,并在我在文章的评论中加载的每篇文章下面。这些注释和与之关联的按钮(也就是新注释按钮)都是在我的宏中创建的。
宏只获取包含我需要显示的注释的数组。它显示文章的注释,并且每个注释都会显示一个回复按钮,因此用户可以回复任何注释或启动新线程。
我使用AJAX和jQuery将新注释存储在我的数据库中而不刷新页面。但是,我需要找到一种方法显示新评论,而无需刷新整个页面。有没有人知道如何在TWIG中做到这一点?
我现在面临的问题是如何异步发布评论。我在加载页面时最初加载当前注释数据库的数组。但是,如果我的数据库更新,我如何用它更新我的数组。有什么建议?我想在添加新评论时抓住我的数组,这就是为什么我的问题是“如何在TWIG模板中检索数组?”,但我对其他建议持开放态度。
答案 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>