2012-02-12 67 views
0

我使用的是Assetic与Twig但不是symfony2框架。资产不生成任何文件

这里的项目是如何建立

/site 
    /template 
     /css 

/public_html 
    /css 

原始CSS是存储/site/template/css下,我想assetic的CSS和输出它运行如下,以/public_html/css

这里的assetic是如何在我的模板设置为一个树枝延伸

$factory = new AssetFactory(//absolute path to `/site/template/`); 
$factory->setDefaultOutput(//absolute path to `/public_html/`); 
$factory->setDebug(false); 
$twig->addExtension(new AsseticExtension($factory)); 

然后:

{% stylesheets 'css/screen.css' output='css/*' %} 
    <link href="{{ asset_url }}" type="text/css" rel="stylesheet" /> 
{% endstylesheets %} 

我可以看到assetic在最终输出已经生成一个唯一的网址:

<link href="css/00da241.css" type="text/css" rel="stylesheet" /> 

但是,如果我查看/public_html/css,文件永远不会生成!

我使用Windows 7服务器与Apache和PHP没有问题写入文件的任何地方。

这可能是什么原因造成的?

回答

3

你在这里所做的是要求资产生成URL的资产(使用树枝)。

但资产url并不指向任何文件。你还是要生成它们,使用转储脚本:

<?php 

use Assetic\AssetWriter; 
use Assetic\Extension\Twig\TwigFormulaLoader; 
use Assetic\Extension\Twig\TwigResource; 
use Assetic\Factory\LazyAssetManager; 

$am = new LazyAssetManager($factory); 

// enable loading assets from twig templates 
$am->setLoader('twig', new TwigFormulaLoader($twig)); 

// loop through all your templates 
foreach ($templates as $template) { 
    $resource = new TwigResource($twigLoader, $template); 
    $am->addResource($resource, 'twig'); 
} 

$writer = new AssetWriter('/path/to/web'); 
$writer->writeManagerAssets($am); 

此脚本使用树枝模板来定义文件转储。 当然,您将必须定义$templates变量和$twig变量。

+0

Thanks florian :)在开发过程中是否有替代方案来运行转储脚本?每次更改资产然后在浏览器中测试时,运行脚本效率不高。 – F21 2012-02-12 23:08:13

+0

Assetic非常灵活,同时又如此复杂以至于很难说:)但是这个文档可以帮助你https://github.com/kriswallsmith/assetic/blob/master/docs/en/build.md – Florian 2012-02-13 08:11:12

+0

由于我使用的是树枝,我希望远离编写我自己的输出脚本:)我看到有一个symfony控制台脚本来监视文件夹并编译任何更改,但是,因为我没有使用symfony,所以没有目前的问题。但是,我会四处寻找,看看我能否找到解决方案。 symfony包中还有一些我喜欢的东西:cache busting和basePath,所以我可能不得不考虑自己的实现。我将这个标记为正确的,因为这解决了我为什么没有创建文件的问题:) – F21 2012-02-13 08:43:41