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

Posted

技术标签:

【中文标题】尝试在我的项目中实现没有 Symfony2 的 Twig 和 Assetic【英文标题】:Trying to implement Twig and Assetic without Symfony2 into my project 【发布时间】: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 扩展生成的名称。我怀疑这是预期的方式...... 【参考方案1】:

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

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

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

当我在模板渲染期间添加所有资产文件时,这个解决方案感觉很奇怪,只是让资产再次迭代所有模板以转储静态版本。所以我基本上两次添加我的资产并无缘无故地解析大量模板。这应该像这样工作吗?

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

【讨论】:

以上是关于尝试在我的项目中实现没有 Symfony2 的 Twig 和 Assetic的主要内容,如果未能解决你的问题,请参考以下文章

我是 xamarin 的新手,想在我的 xamarin.forms 项目中实现对话框

在 Unity 中实现 Span<T>

如何在我的 Vue 项目中实现 Electron 的 webview?

如何在我的 Google App Engine 项目中实现 OpenID 使用者?

如何使用 vue-browser-acl 在我的 Vue 项目中实现 ACL?

Symfony CSRF 和 Ajax