我正在尝试使用Assetic与Twig配对,而不使用Symfony。我对树枝和资产有以下设置:
/**
* @param string $templateBaseDir Path to templates
* @param string $cacheBaseDir Path to compilation cache
*/
public function setupTwig($templateBaseDir, $cacheBaseDir)
{
$loader = new Twig_Loader_Filesystem($templateBaseDir);
$this->twig = new Twig_Environment(
$loader, array( /*'cache' => $cacheBaseDir,*/)
);
$factory = new AssetFactory(__DIR__ . '/../../Resources/public/');
$factory->setDebug(true);
$fm = new FilterManager();
$fm->set('lessphp', new LessphpFilter());
$fm->set('rewrite', new CssRewriteFilter());
$factory->setFilterManager($fm);
$this->twig->addExtension(new AsseticExtension($factory));
$this->twig->addExtension(new Twig_Extension_Debug());
$am = new LazyAssetManager($factory);
$factory->setAssetManager($am);
$am->setLoader('twig', new TwigFormulaLoader($this->twig));
$am->addResource(new DirectoryResource(__DIR__ . '/../../Resources/views/'),'twig');
$writer = new AssetWriter(__DIR__ . '/../../../../../../web');
$writer->writeManagerAssets($am);
$this->assetic = $factory;
}
这有效地从twig扩展名生成所有请求的文件,但
{% stylesheets 'css/jquery-ui.css' %}
<LINK rel=stylesheet type=text/css href="{{ asset_url }}" media=all>
{% endstylesheets %}
可生产
<LINK rel=stylesheet type=text/css href="css/e9a2fc7_jquery-ui_1.css" media=all>
实际生成的文件名为css/e9a2fc7.css
如何使这些名称匹配?
答案 0 :(得分:0)
我调查了source code of Assetic。如果用于调试组合脚本和样式表,则此行为。将Assetic移动到非调试模式会使代码按预期工作。
因此,每次使用combine=false
而不是调试模式是必要的。
我不知道为什么Assetic会从网络上无法访问调试文件(生成一个名称并生成另一个名称)。
我稍后会尝试发布错误。
UPD。 combine=false
不起作用,因为即使设置了Assetic也会在转储和请求带有fileparts的文件时生成合并文件(例如css/ae13694_data_tables_1.css
而不是css/ae13694.css
)。
对于历史 - 我很久以前就提出了一个错误 https://github.com/kriswallsmith/assetic/issues/613