【发布时间】:2014-05-22 16:58:46
【问题描述】:
我在我的项目中使用 Twig 库很长时间了,最近才听说 Assetic。我目前正在尝试将这个库实现到我的项目中,并且很难做到。
我想要什么 我只想在我的 twig 模板中添加 css/js 资源,并在需要时将它们转储到静态文件中,以便浏览器可以找到它们。
我找不到任何好的文档或教程来显示所有需要的代码或至少解释为什么我必须做什么。也许有人可以帮忙?
以下是我所拥有的相关部分(未显示我所有的框架内容):
PHP 部分
// Init Twig
$TwigLoader = new Twig_Loader_Filesystem($templatesPath]);
$Twig = new Twig_Environment($TwigLoader, $environment);
// Init Assetic
$FilterManager = new FilterManager();
$AssetFactory = new AssetFactory($assetsPath);
$AssetFactory->setAssetManager($AssetManager);
$AssetFactory->setFilterManager($FilterManager);
$AssetFactory->setDebug(DEBUG);
// Enable Assetic extension in Twig
$Twig->addExtension(new AsseticExtension($AssetFactory));
// Render a page
$Template = $this->Twig->loadTemplate($template);
$Output = $Template->render($Data);
// Dump compiled assets - THIS IS MOST PROBABLY COMPLETELY WRONG???
$AssetManager = new LazyAssetManager($AssetFactory);
$AssetManager->setLoader('twig', new TwigFormulaLoader($Twig));
$resource = new TwigResource($Twig->getLoader(), $template);
$AssetManager->addResource($resource, 'twig');
$writer = new AssetWriter('../public/assets');
$writer->writeManagerAssets($AssetManager);
树枝部分
我有一个“index.html.twig”模板(上面在我的 $template 变量中使用,而不是包含一个“head.html.twig”文件。这些是该文件的内容:
{% stylesheets 'styles/base.css' output='css/all.css' %}
<link href="{{ asset_url }}" type="text/css" rel="stylesheet" />
{% endstylesheets %}
结果
<html>
<head>
<link href="css/all_base_1.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="content">Welcome</div>
</body>
</html>
虽然找不到“css/all_base_1.css”,但我在此过程中没有遇到任何 PHP 错误。
【问题讨论】:
-
发现,当我在“//转储编译资产”部分使用
head.html.twig而不是它的父index.html.twig时,它至少将css文件转储到光盘。它仍然没有由 twig-assetic 扩展生成的名称。我怀疑这是预期的方式......