【问题标题】:Use PHP function in TWIG?在 TWIG 中使用 PHP 函数?
【发布时间】:2012-01-01 02:36:31
【问题描述】:

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

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

如何在 TWIG 中制作它?

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

我如何做到这一点?

【问题讨论】:

    标签: php symfony twig


    【解决方案1】:

    您需要的是functionsfilters。您可以使用示例轻松添加这些内容。

    【讨论】:

    • 您能否提供一些有关实施的细节? “Twig_Environment”类的函数和实例化是否应该包含在控制器中?对象“$twig = new Twig_Environment($loader)”是否应该作为变量(例如 'twig'=>$twig)传递给渲染的模板?定义“$loader = new Twig_Loader_Filesystem('/path/to/templates');”中的“/path/to/templates”中应该包含什么。那是我包中模板的路径吗?需要绝对吗?它对我不起作用。一个例子将不胜感激......
    • 对于任何来到这里并想要一个示例的人,在 sensiolabs 的 Twig 文档中有一个非常好的简单示例:twig.sensiolabs.org/doc/advanced.html#functions
    【解决方案2】:

    如果您在 symfony 2 中工作,这也应该有所帮助。概念是相同的,但您将代码放在其他地方并对其进行格式设置略有不同。

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

    【讨论】:

      【解决方案3】:
      // $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));
      });
      

      在树枝模板中:

      {{ explode(",", "It's raining, cats and dogs.").0 | raw }}
      

      这将输出“正在下雨”。默认情况下,返回值在 Twig 中进行转义。

      Twig_SimpleFunction 是首选的类。 Twig 中所有其他与函数相关的类自 1.12 起已弃用(将在 2.0 中删除)。

      在 Symfony2 控制器中:

      $twig = $this->get('twig');
      

      【讨论】:

      • 这应该在标准 symfony2 应用程序中的哪里注册?
      • 永远不应该使用它,因为它非常不安全。
      • 并非如此,它不会突然变成 wordpress。但模板应该只使用可用数据呈现 HTML/Javascript。
      【解决方案4】:

      已经有一个 Twig 扩展可以让你从你的 Twig 模板中调用 PHP 函数,例如:

      Hi, I am unique: {{ uniqid() }}.
      
      And {{ floor(7.7) }} is floor of 7.7.
      

      见官方extension repository

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多