尝试在没有Symfony2的情况下将Twig和Assetic实现到我的项目中

时间:2014-04-09 13:03:14

标签: php twig assetic

我在我的项目中使用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);

Twig部分

我有一个" 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>

&#34; css / all_base_1.css&#34;无处可寻,但我一路上都没有得到任何PHP错误。

1 个答案:

答案 0 :(得分:0)

我设法让它工作,但我仍然认为这个解决方案很奇怪:

我将所有未编译的资源放入公共可访问文件夹,以便在$AssetFactory设置为DEBUG时使用它们。

如果我遍历// Dump compiled assets部分中的所有模板并在我的树枝模板中指定output文件名,它将生成所有文件并链接到它们。

这个解决方案感觉很奇怪,因为我在模板渲染过程中添加了所有资产文件,只是为了让资产再次遍历所有模板以转储静态版本。所以我基本上两次添加我的资产并无缘无故地解析大量的模板。这是否适合这样工作?

遗憾的是,资产文件在所有这些方面仍然无用......