我有一个链接到动态生成的js的基本模板(base.html.twig):
<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')
);
}但我希望使用与基本模板中相同的Twig上下文呈现JS (在renderJs.js.twig中具有与base.html.twig中相同的变量)。这有可能吗?有什么办法解决这个问题吗?
发布于 2016-12-16 01:03:13
这就是所有东西的工作方式(据我所知):
因此在本例中有两个请求:一个是获取base.html.twig呈现,另一个是获取renderJS URL提供的脚本文件。当服务器收到第二个请求时,第一个请求的上下文已经消失了。
我能想到两个选择。选项1是重新生成上下文(理想情况下,通过在这两个位置设置某些类或方法来实现)。如果您想要对javascript文件进行第二次请求(比如它可以被缓存),并且生成上下文不是非常耗费资源,那么这是很好的。
选项2是跳过对动作的需要,并将render.js.twig模板作为内联javascript包含在base.html.twig模板中。如果创建上下文的成本非常高,而javascript又很轻,并且永远不会缓存,那么这可能才是一个好主意(但让文件尽可能多地缓存可能会更好)。
让我知道它们听起来如何,以及它们可能如何应用于您,我可以深入了解更多细节。
https://stackoverflow.com/questions/41168447
复制相似问题