web-dev-qa-db-ja.com

TWIGでPHP関数を使用しますか?

PHPテンプレートでは、php関数を使用できます。例:

foreach ($users as $user){
  echo someFunction($user->getName());
}

TWIGでどうやって作ることができますか?

{% for user in users %}
    * {{ user.name }}
{% else %}
    No user have been found.
{% endfor %}

どうすればこれを達成できますか?

15
Martin Sowning

必要なものは functions または filters です。例を使用して、これらを簡単に追加できます。

14
// $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');
10

すでにTwig拡張機能があり、PHP関数をTwigテンプレートから呼び出すことができます:

Hi, I am unique: {{ uniqid() }}.

And {{ floor(7.7) }} is floor of 7.7.

公式 拡張リポジトリ を参照してください。

1
umpirsky

Symfony 2で作業している場合、これも役立つはずです。概念は同じですが、コードを別の場所に配置し、フォーマットを少し変えます。

http://symfony.com/doc/2.0/cookbook/templating/twig_extension.html

0
Nenai