2012-02-19 64 views
1

我如何使用YUI压缩机以下情形:如何使用YUI压缩机Symfony2的路由/控制器

的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

我实际上并不建议你这样做,因为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()等,因此您可以动态构建内容。