【问题标题】:How to update an array in TWIG template?如何更新 TWIG 模板中的数组?
【发布时间】:2013-03-28 06:24:51
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php jquery html ajax twig


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      相关资源
      最近更新 更多