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


Trying to implement Twig and Assetic without Symfony2 into my project

我在项目中使用Twig库已经很长时间了,最近才听说Assetic。我目前正在尝试将这个库实现到我的项目中,并且很难做到这一点

我想要什么我只想在我的小树枝模板中添加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.titch"模板(上面用在我的$template变量中,包括一个"head.html.trick"文件

{% 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错误。

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

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

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

这个解决方案感觉很奇怪,因为我在模板渲染期间添加了所有资产文件,结果却让assetic再次迭代所有模板以转储静态版本。因此,我基本上是两次添加我的资产,并毫无理由地解析大量模板。这应该是这样的吗?

遗憾的是,Assetic文件在所有这些方面仍然毫无用处。。。