SymfonyでTwigにグローバル変数を設定する方法[Twig,Symfony]

検証環境 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にありました。
これと同じくらいブログでまとめられたらと思います。

テンプレートエンジンTwigを覚える本