我究竟如何使用Assetic的Twig扩展程序?

时间:2016-03-15 23:29:23

标签: php twig assetic twig-extension

我(尝试)使用带有Twig和Slim的Assetic(因此,没有Symfony)。我想我已经找到了创建AssetCollection的基础知识,但我并不清楚如何在我的模板中链接此集合。

$fm = new FilterManager();

$factory = new AssetFactory('');
$factory->setDebug(true);
$factory->setFilterManager($fm);

$app->css = $factory->createAsset([
    'assets://css/bootstrap-3.3.1.css',
    'assets://css/bootstrap-custom.css',
    'assets://css/paper.css'
], [
    // Filters here
]);

如果我执行类似echo $app->css->dump();的操作,它会正确打印出我的所有CSS。太好了,但是如何将其挂钩到Twig?

项目README中给出的示例给我留下了比我开始时更多的问题:

{% stylesheets '/path/to/sass/main.sass' filter='sass,?yui_css' output='css/all.css' %}
    <link href="{{ asset_url }}" type="text/css" rel="stylesheet" />
{% endstylesheets %}

到底是什么/path/to/sass/main.sass?我以为我是通过$factory->createAsset宣布我的资产。文档继续说:

  

当扩展处于调试模式时,同一个标记将呈现多个链接元素,每个链接元素对应css/src/*.sass glob引用的每个资产...

我在README中的其他任何地方都看不到css/src/*.sass的任何内容。他们在说什么?

最后,我在README的底部看到了这一点:

<?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);

在我看来,这就像我在构建步骤中运行一次(&#34;循环遍历所有模板&#34;)。但是,我认为Assetic还支持资产的按需过滤(和缓存)。我显然不想在每个请求上遍历所有模板。不应该通过Twig扩展程序自动触发对writeManagerAssets的相关调用吗?

非常感谢任何帮助。

0 个答案:

没有答案