symfony公式にはfilterしか書いてないのでよく使いそうな
function,filter,globalのtwig拡張のメモ。
###クラス例
namespace CommonBundle\Twig\Extension;
class CommonExtension extends \Twig_Extension implements \Twig_Extension_GlobalsInterface
{
protected $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function getName()
{
return "common_extension";
}
/**
* twigで使用するfilterを設定
*
* @return array
*/
public function getFilters() {
return [
new \Twig_SimpleFilter('date' ,[$this, 'dateFilter']),
];
}
/**
* twigで使用するfunctionを設定
*
* @return array
*/
public function getFunctions() {
return [
new \Twig_SimpleFunction('testFunction', [$this, 'testFunction']),
];
}
/**
* twigで使用するglobal変数を設定
*
* @return array
*/
public function getGlobals()
{
//twig内で使用したい変数とかを返り値に設定
$user = "hogehoge";
return [
'user' => $user,
];
}
/**
* @param $dateTime
* @return string
*/
public function dateFilter($dateTime)
{
// 何か処理
return $hoge;
}
/**
* @param hoge
* @return string
*/
public function testFunction($hoge)
{
// 何か処理
return $hoge;
}
}
DI設定
####service.yml
サービスコンテナーを使う場合
common.twig.extension:
class: CommonBundle\Twig\Extension\CommonExtension
arguments: ['@service_container' ]
tags:
- { name: twig.extension }
###twig側
####filter
{{ dateTime|date }}
####function
{{ testFunction("hogehoge") }}
getGlobalで指定した変数はtwig側でも使えるようになる
{{ user }}
hogehoge
と出るはず。