在TWIG中使用PHP函数?

Mar*_*ing 15 php symfony twig

在PHP模板中,我可以使用php函数,例如:

foreach ($users as $user){
  echo someFunction($user->getName());
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能在TWIG中制作它?

{% for user in users %}
    * {{ user.name }}
{% else %}
    No user have been found.
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我该如何实现这一目标?

Wes*_*orp 14

您需要的是功能过滤器.您可以使用示例轻松添加这些内容.

  • 你能否提供一些有关实施的细节?是否应将"Twig_Environment"类的功能和实例化包含在控制器中?对象"$ twig = new Twig_Environment($ loader)"是否应该作为变量(例如'twig'=> $ twig)传递给渲染模板?什么应该包含在定义"$ loader = new Twig_Loader_Filesystem('/ path/to/templates');"中的"/ path/to/templates"中.这是我的包中模板的路径吗?它需要绝对吗?它对我不起作用.最值得赞赏的一个例子...... (2认同)

Ale*_*hyi 10

// $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));
});
Run Code Online (Sandbox Code Playgroud)

在树枝模板中:

{{ explode(",", "It's raining, cats and dogs.").0 | raw }}
Run Code Online (Sandbox Code Playgroud)

这将输出"正在下雨".默认情况下,返回的值在Twig中进行转义.

Twig_SimpleFunction是首选使用的类.Twig中所有其他与函数相关的类从1.12开始被弃用(将在2.0中删除).

在Symfony2控制器中:

$twig = $this->get('twig');
Run Code Online (Sandbox Code Playgroud)