javascript - [交响乐+ Twig ]

标签 javascript php symfony twig

我有基本模板(base.html.twig),其中包含动态生成的 js 链接:

<script type="text/javascript">
  <script type="text/javascript" src="{{ path('renderJs') }}"></script>
</script>

以及呈现此 JS 的 Action:

/**
     * @Route("/scripts.js",
     *  name="renderJs")
     */
    public function renderJsAction(Request $request)
    {
        return new Response(
            $this->renderView(
                "AcmeBundle:Default:renderJs.js.twig",
                array('foo' => 'bar')
            ),
            200,
            array('Content-Type' => 'text/javascript')
        );
    }

但我希望渲染 JS 具有与基本模板相同的 Twig 上下文(在 renderJs.js.twig 中具有与 base.html.twig 中相同的变量)。 那可能吗?有什么想法可以解决这个问题吗?

最佳答案

这就是一切的运作方式(据我所知):

  1. base.html.twig 进行渲染,将 renderJS 操作路由的 URL 放入脚本标记的源中
  2. 用户浏览器加载生成的页面,并在脚本标记中查找 renderJS 操作的 URL,然后向服务器发出另一个请求以获取该 URL。

因此,在这种情况下有两个请求:一个请求获取 base.html.twig 渲染,另一个请求获取 renderJS URL 提供的脚本文件。当服务器收到第二个请求时,第一个请求的上下文就消失了。

我可以想到两个选择。选项 1 是重新生成上下文(理想情况下通过设置一些类或方法来在两个地方执行此操作)。如果您想对 javascript 文件进行第二次请求(例如它是否可以缓存)并且生成上下文不是非常消耗资源,那么这很好。

选项 2 是跳过该操作的需要,并将 render.js.twig 模板作为内联 JavaScript 包含在 base.html.twig 模板中。如果创建上下文的成本确实很高并且 javascript 很轻且永远不会被缓存,那么这可能只是一个好主意(但最好让文件尽可能多地缓存)。

让我知道它们听起来如何以及它们如何适用于您,我可以深入了解更多细节。

关于javascript - [交响乐+ Twig ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41168447/

相关文章:

php - 如何在主键上绑定(bind)值?

php - 使用 php ajax jquery 在表中显示输入框的结果

symfony - 错误 : Serialization for the format json is not supported

php - 以多对多关系 symfony2 的形式设置多个 ='false'

php - windows - Symfony2 进程在传递环境变量时崩溃

javascript - 解除累积

javascript - 隔离范围如何在angularjs中工作?

javascript - AngularJS - 在 POST 请求中使用 this 与 $scope

javascript - 排序或搜索列表时自定义消失

php/MySQL - 如何将产品表连接在一起