您的问题不是 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>