首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[Symfony + Twig]

[Symfony + Twig]
EN

Stack Overflow用户
提问于 2016-12-16 00:04:19
回答 1查看 60关注 0票数 1

我有一个链接到动态生成的js的基本模板(base.html.twig):

代码语言:javascript
复制
<script type="text/javascript">
  <script type="text/javascript" src="{{ path('renderJs') }}"></script>
</script>

以及呈现此JS的Action:

代码语言:javascript
复制
/**
     * @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')
        );
    }

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

EN

回答 1

Stack Overflow用户

发布于 2016-12-16 01:03:13

这就是所有东西的工作方式(据我所知):

  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又很轻,并且永远不会缓存,那么这可能才是一个好主意(但让文件尽可能多地缓存可能会更好)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41168447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档