Twig - Установить переменные ветки из manifest.json - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь реализовать среду Webpack в моих проектах Craft 3.Чтобы динамически вызывать мои хэшированные ресурсы, я вывожу файл в формате 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 }})

1 Ответ

0 голосов
/ 18 декабря 2018

Вы должны сначала декодировать JSON.Я бы предложил один из двух подходов:

  • Создание пользовательской manifest функции для Twig, которая будет возвращать декодированный объект манифеста
  • или создание json_decode фильтра для Twig, декодирование включено 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

Здесь уже рассматривается:

ДекодированиеJSON in Twig

Использование:

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

{% set manifest = manifest | json_decode %}
...