Дополнительная конфигурация

Расширение Yii Twig позволяет вам определять собственный синтаксис и переносить стандартные классы-хелперы в шаблоны. Давайте рассмотрим параметры конфигурации.

Globals

Вы можете добавлять хелперы или другие значения с помощью секции globals в конфигурации приложения. Вы можете определить хелперы Yii или любые ваши переменные следующим образом:

'globals' => [
    'name' => 'Carsten',
    'GridView' => ['class' => '\yii\grid\GridView'],
],

Сконфигурировав один раз, вы можете использовать globals в любых ваших шаблонах Twig:

Hello, {{name}}! {{ html.a('Please login', 'site/login') | raw }}.

{{ GridView.widget({'dataProvider' : provider}) | raw }}

Функции

Вы можете определять дополнительные функции следующим образом:

'functions' => [
    'rot13' => 'str_rot13',
    'truncate' => '\yii\helpers\StringHelper::truncate',
    new \Twig\TwigFunction('rot14', 'str_rot13'),
    new \Twig\TwigFunction('add_*', function ($symbols, $val) {
        return $val . $symbols;
    }, ['is_safe' => ['html']]),
    'callable_add_*' => function ($symbols, $val) {
        return $val . $symbols;
    },
    'sum' => function ($a, $b) {
        return $a + $b;
    }
],

И использовать эти функции в шаблоне Twig:

{{ rot13('test') }}
{{ truncate(post.text, 100) }}
{{ rot14('test') }}
{{ add_42('answer') }}
{{ callable_add_42('test') }}
{{ sum(1, 2) }}

Фильтры

Дополнительные фильтры можно добавлять в конфигурации в секции filters:

'filters' => [
    'jsonEncode' => '\yii\helpers\Json::htmlEncode',
    new \Twig\TwigFilter('rot13', 'str_rot13'),
    new \Twig\TwigFilter('add_*', function ($symbols, $val) {
        return $val . $symbols;
    }, ['is_safe' => ['html']]),
    'callable_rot13' => function($string) {
        return str_rot13($string);
    },
    'callable_add_*' => function ($symbols, $val) {
        return $val . $symbols;
    }
],

В шаблоне применение фильтров выглядит следующим образом:

{{ model|jsonEncode }}
{{ 'test'|rot13 }}
{{ 'answer'|add_42 }}
{{ 'test'|callable_rot13 }}
{{ 'answer'|callable_add_42 }}

Пути

Дополнительные пути можно добавлять в конфигурации в секции twigFallbackPaths:

'twigFallbackPaths' => [
    'layouts' => '@app/views/layouts' //возможно использование yii2-алиасов
]

и затем использовать в шаблонах:

{% extends '@layouts/main.twig %}

Профилирование

Чтобы в trace логи писались данные twig-профайлера, необходимо добавить расширение

'extensions' => [
    \yii\twig\Profile::class
]

Данные записываются только когда приложение находится в режиме отладки.

Использование профайлера влияет на производительность.