PHP
twig
Symfony2
symfony3

Symfony3のTwigでGlobal値を利用する方法

概要

TwigでGlobal値を利用する場合はconfig.ymlで読み込むか、Twigの拡張を利用する方法がある
基本は前者でよいと思うが管理方法は人それぞれなので二種類メモしておく

動作環境

  • Symfony 3.4.15
  • Twig 2.5.0

方法1:config.ymlに定義する

config.yml
# Twig Configuration
twig:
    globals:
        # parametersから読み込む場合
        base_url: '%base_url%'
        site:
            name: 'テストサイト'

config.ymlの肥大化を防ぎたい場合はtwig.ymlとかに書いてimportすれば良い

templateで使う

sample.twig
{{ site.name }}

Controllerで使う

<?php
    /**
     * @Route("/", name="sample")
     * @Method("GET")
     */
    public function sampleAction()
    {
        $twigGlobalValues = $this->get('twig')->getGlobals();
        dump(site_name)
    }

方法2:Twigの拡張設定を行って定義する

yamlにGlobal値を定義する

src/AppBundle/Resources/config/global_params.yml
site:
    name: 'テストサイト'

twigの拡張設定をする

src/AppBundle/Twig/AppExtension.php
<?php
namespace AppBundle\Twig;

use \Symfony\Component\Yaml\Yaml;
class AppExtension extends \Twig_Extension implements \Twig_Extension_GlobalsInterface
{

    /**
     * Global値を取得する
     * @return array
     */
    public function getGlobals()
    {
        $app_global = Yaml::parseFile(__DIR__.'/../Resources/config/global_params.yml');

        return array(
            'app_global' => $app_global,
        );
    }

}

templateで使う

sample.twig
{{ app_global.site.name }}

controllerで使う

<?php
    /**
     * @Route("/", name="sample")
     * @Method("GET")
     */
    public function sampleAction()
    {
        $twigGlobalValues = $this->get('twig')->getGlobals();
        dump($twigGlobalValues['app_global']);
    }