如何在以下场景中使用YUI压缩器:
的routing.yml
js_route:
pattern: /foo/bar.{_format}
defaults: { _controller: FooBundle:Default:JS }
requirements:
_format: js
DefaultController.php
public function JSAction() {
// ...
// content for JS file is being generated
// ...
return $this->render('FooBundle:Default:bar.js.twig', $returnarray);
// ...
}
我知道如何在我的树枝模板中使用它(例如{%javascripts'@FooBundle / Resources / public / js / *'filter ='?yui_js'%})但遗憾的是不适用于上面。
任何提示?谢谢!
答案 0 :(得分:0)
我实际上并不建议你这样做,因为YUI JS压缩器将在每次请求资源时加载。但无论如何,这是一种方法。
注意,为了保持示例简单,我排除了任何额外的代码,以正确确定您的Web根目录和jar文件的位置。
$path = $this->container->getParameter('kernel.root_dir');
$ac = new \Assetic\Asset\AssetCollection(array(
new \Assetic\Asset\FileAsset($path . '/../src/WebBundle/Resources/public/js/jquery.longclick.js')
), 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'));
另请注意,您不仅限于FileAsset()。还有其他可用的类,如StringAsset()等,因此您可以动态构建内容。