我正在尝试在Craft 3项目上实现Webpack环境。为了动态调用散列的资源,我将在manifest.json
文件中输出,并将其导入到模板中。
manifest.json
{"app":["js/app3bfb132e4187389fccd4.js","css/app53079ca4a05210b4af0c.css"],"vendor":"js/vendor49171fe3f01c19da9296.js"}
index.twig
{% set manifest %}
{% include './manifest.json' %}
{% endset %}
该变量的输出是一个字符串。无论如何,要对其进行编码,以便仅使用Twig即可访问/打印变量? (例如,使用{{ manifest.app }}
)
答案 0 :(得分:1)
您必须先解码JSON。我建议使用以下两种方法之一:
manifest
函数,该函数将返回解码的清单对象json_decode
过滤器,解码包含的json内容并使用它清单功能
<?php
namespace App\Twig;
class ManifestExtension extends \Twig_Extension
{
private $manifestFile;
public function __construct($manifestFile)
{
$this->manifestFile = $manifestFile;
}
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('manifest', array($this, 'manifest')),
);
}
public function manifest()
{
$content = file_get_contents($this->manifestFile);
return json_decode($content);
}
}
您可以在services.yml
中将其注册为服务,以提供manifest.json文件的路径。
App\Twig\ManifestExtension:
class: 'App\Twig\ManifestExtension'
arguments: ['%kernel.project_dir%/../public/manifest.json']
tags: [twig.extension]
用法:
{% set manifest = manifest() %}
json_decode过滤器
这里已经介绍过了:
用法:
{% set manifest %}
{% include './manifest.json' %}
{% endset %}
{% set manifest = manifest | json_decode %}