Twig - Установить переменные ветки из manifest.json
Я пытаюсь реализовать среду 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 ответ
Вы должны сначала декодировать 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
Это уже было покрыто здесь:
Использование:
{% set manifest %}
{% include './manifest.json' %}
{% endset %}
{% set manifest = manifest | json_decode %}