如何在Symfony2路由/控制器中使用YUI压缩器

时间:2012-02-19 23:18:31

标签: symfony yui

如何在以下场景中使用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'%})但遗憾的是不适用于上面。

任何提示?谢谢!

1 个答案:

答案 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()等,因此您可以动态构建内容。