PHPテンプレートでは、php関数を使用できます。例:
foreach ($users as $user){
echo someFunction($user->getName());
}
TWIGでどうやって作ることができますか?
{% for user in users %}
* {{ user.name }}
{% else %}
No user have been found.
{% endfor %}
どうすればこれを達成できますか?
// $twig is a Twig_Environment instance.
$twig->registerUndefinedFunctionCallback(function($name) {
if (function_exists($name)) {
return new Twig_SimpleFunction($name, function() use($name) {
return call_user_func_array($name, func_get_args());
});
}
throw new \RuntimeException(sprintf('Function %s not found', $name));
});
twigテンプレート:
{{ explode(",", "It's raining, cats and dogs.").0 | raw }}
これは「雨が降っています」を出力します。デフォルトでは、戻り値はTwigでエスケープされます。
Twig_SimpleFunctionは、使用するのに推奨されるクラスです。 Twigの他のすべての関数関連クラスは、1.12以降非推奨になりました(2.0で削除される予定です)。
Symfony2コントローラーの場合:
$twig = $this->get('twig');
すでにTwig拡張機能があり、PHP関数をTwigテンプレートから呼び出すことができます:
Hi, I am unique: {{ uniqid() }}.
And {{ floor(7.7) }} is floor of 7.7.
公式 拡張リポジトリ を参照してください。
Symfony 2で作業している場合、これも役立つはずです。概念は同じですが、コードを別の場所に配置し、フォーマットを少し変えます。
http://symfony.com/doc/2.0/cookbook/templating/twig_extension.html