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