Edited at

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']);
}