0

我正在尝试在我的 Craft 3 项目中实现 Webpack 环境。为了动态调用我的散列资源,我将在manifest.json文件中输出并将其导入到我的模板中。

清单.json

{"app":["js/app3bfb132e4187389fccd4.js","css/app53079ca4a05210b4af0c.css"],"vendor":"js/vendor49171fe3f01c19da9296.js"}

索引.twig

{% set manifest %}
    {% include './manifest.json' %}
{% endset %}

该变量的输出是一个字符串。无论如何要对其进行编码,以便仅使用 Twig 可以访问/打印变量?({{ manifest.app }}例如使用)

4

1 回答 1

2

您必须先解码 JSON。我会建议以下两种方法之一:

  • 为 Twig创建自定义manifest函数,该函数将返回解码的清单对象
  • 或为 Twig 创建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 过滤器

这里已经介绍过了:

在 Twig 中解码 JSON

用法:

{% set manifest %}
    {% include './manifest.json' %}
{% endset %}

{% set manifest = manifest | json_decode %}
于 2018-12-18T18:50:31.450 回答