使用Twig创建动态Javascript文件

使用Twig创建动态Javascript文件,javascript,symfony,twig,assetic,Javascript,Symfony,Twig,Assetic,我正在开发一种具有特定功能块的仪表板迷你网站。使用symfony2,我有一个专用的route/instagram,它会得到一个html片段,显示在我们场地拍摄的所有图像 我想每10分钟刷新一次这个块,所以我需要在一个带有setTimeout的函数中运行下面的javascript,为了清晰起见省略了它 jQuery('.gallery').load("/instagram", function() { jQuery('.gallery').cycle({ fx: 'fade

我正在开发一种具有特定功能块的仪表板迷你网站。使用symfony2,我有一个专用的route/instagram,它会得到一个html片段,显示在我们场地拍摄的所有图像

我想每10分钟刷新一次这个块,所以我需要在一个带有setTimeout的函数中运行下面的javascript,为了清晰起见省略了它

jQuery('.gallery').load("/instagram", function() {
    jQuery('.gallery').cycle({
        fx: 'fade'
    });
});
这段代码位于“@KunstmaanDashboardBundle/Resources/public/js/instagram.js”中,我通过Assetic运行该代码进行连接和优化

{% javascripts
    '@KunstmaanDashboardBundle/Resources/public/js/thirdparty/jquery-1.7.min.js'
    '@KunstmaanDashboardBundle/Resources/public/js/thirdparty/jquery.cycle.lite.js'
    '@KunstmaanDashboardBundle/Resources/public/js/*'
    filter='closure'
%}
    <script src="{{ asset_url }}"></script>
{% endjavascripts %}
但这样一来,我就失去了Assetic的优化和内容分离优势。我们的自定义代码是最需要优化的


所以我的问题是,如何将AsseticJavaScript(以及css)结合起来使用Twig解析器,我可以将上面的代码放在instagram.js文件中并使其工作:)

您当前无法使用Assetic处理Twig模板的输出,因为Assetic静态转储资产以用于生产,而Twig模板是在运行时处理的


对于此问题,您可以使用公开路由并在客户端对其进行处理,然后您的JavaScript可以使用Assetic进行处理。

多亏了这篇文章,我找到了解决方案:

jQuery('.gallery').load("{{ path('KunstmaanDashboardBundle_instagram') }}", function() {
    jQuery('.gallery').cycle({
        fx: 'fade'
    });
});
    $response = $this->renderView('template.html.twig');

    $path = $this->container->getParameter('kernel.root_dir');
    $ac = new \Assetic\Asset\StringAsset($response , array(new \Assetic\Filter\Yui\JsCompressorFilter($path . '/Resources/java/yuicompressor-2.4.7.jar')));

    $compressJS = $ac->dump();
    return new Response($compressJS, 200, array('Content-Type' => 'text/javascript'));