検証環境 Symfony3.4
Symfonyを使ってTwigに対してグローバル変数を設定する方法です。
マニュアルを見る限り、ほかのバージョンでも動作可能だと思います。
configファイルでグローバル変数を設定する。
基本的には、下記のようにコンフィグに追加するだけで設定可能です。
# app/config/config.yml
twig:
globals:
main_color: 'red'
...
# sample twig
{{ dump(main_color) }}
// result red
とてもシンプルです。もちろんサービスコンテナ内のパラメータを使用することも可能です。
# Using Service Container Parameters
# app/config/parameters.yml
parameters:
main_color: 'red'
# app/config/config.yml
twig:
globals:
main_color: '%main_color%'
以上が基本的な使い方になります。
グローバル変数を固定ではなく、可変させたいときは?
グローバル変数に、サービスを設定することで値をコントロールすることが可能です。
簡単なサンプルです。
// ColorDefine.php
...
class ColorDefine
{
public function getColor($main)
{
$color = $main;
return $color;
}
}
# app/config/config.yml
twig:
globals:
# To define a service as a global Twig variable, prefix the string with @.
main_color: '@AppBundle\Service\ColorDefine'
# twig
{{ dump(main_color.getColor('green')) }}
result green
上記のようにTwig上でサービスを呼び出すことが可能になります。
引数も渡すことができるので、拡張性はとても高いと思います。ただし、globalに設定しているので、Twig上で使用していなくてもServiceが読み込まれた状態になってしまうという注意点があります。
以上Twigへのglobal変数の渡し方のまとめでした。
Symfonyおすすめ書籍
あまり種類がないのと、そもそもフレームワークとして情報が膨大なので、入門でも結構読み応えがあります。
「PHPフレームワーク Symfony 4入門」
Twigおすすめの書籍
Twigだけに特化した書籍は読んだことがないのですが、AmazonのKindleにありました。
これと同じくらいブログでまとめられたらと思います。