Yii Twig エクステンションは、あなた自身の構文を定義して、通常のヘルパ・クラスをテンプレートに導入することを可能にしています。 構成のオプションを見ていきましょう。
アプリケーション構成の globals
変数によって、グローバルなヘルパや変数を追加することが出来ます。
Yii のヘルパとあなた自身の変数を定義することが出来ます。
'globals' => [
'html' => ['class' => '\yii\helpers\Html'],
'name' => 'Carsten',
'GridView' => ['class' => '\yii\grid\GridView'],
],
いったん構成してしまえば、テンプレートの中で以下のようにグローバルを使用することが出来ます。
Hello, {{name}}! {{ html.a('ログインしてください', '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;
}
],
テンプレートでは、次のようにして使うことが出来ます。
{{ 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 %}
トレース・ログに twig-profile のデータを含めるためには、エクステンションを追加する必要があります。
'extensions' => [
\yii\twig\Profile::class
]
プロファイラはデバッグ・モードの時だけログを吐きます。
プロファイリングの使用はパフォーマンスに影響を及ぼします。