Php 在细枝for循环中调用函数

Php 在细枝for循环中调用函数,php,symfony,twig,Php,Symfony,Twig,如何在Twigg for循环中调用函数。 我有一个数据库的数组输出,我在twig中调用它,如下所示: <tbody> {% for O in Orders %} <tr> <td>{{ O.DomainName~'.'~O.Extension }}</td> <td>{{ O.Package }}</td> <td>{{ O.StoreDate }}</td> <td>{{ O.Execu

如何在Twigg for循环中调用函数。 我有一个数据库的数组输出,我在twig中调用它,如下所示:

<tbody>
{% for O in Orders %}
<tr>
<td>{{ O.DomainName~'.'~O.Extension }}</td>
<td>{{ O.Package }}</td>
<td>{{ O.StoreDate }}</td>
<td>{{ O.ExecuteDate }}</td>
<td>{{ O.Email }}</td>
<td>{{ O.UserIP }}</td>
<td></td>
</tr>
{% endfor %}
</tbody>
现在我知道我不能直接从twig调用函数。
我是否需要使用twig\u simplefunction将其添加为twig扩展名?

创建一个twig扩展名,并将代码封装在其中。您的代码将变得更加干净,不会污染视图和控制器

首先创建一个过滤器

namespace AppBundle\Twig;
class MyIpExtension extends \Twig_Extension {
  public function getFilters()
  {
    return array(
        new \Twig_SimpleFilter('ipcountry', array($this, 'country')),
    );
  }

  public function ip_country($userIP) {
    $ip = $userIP;
    $details = json_decode(file_get_contents("http://freegeoip.net/json/{$ip}"));

    return $details->country_code; // -> "US"
 }


  public function getName()
  {
     return 'app_extension';
  }
}
然后注册为symfony集装箱服务

# app/config/services.yml
services:
   app.twig_extension:
      class: AppBundle\Twig\MyIpExtension
      public: false
      tags:
        - { name: twig.extension }
然后在细枝视图中使用扩展

{{ O.UserIP | ipcountry }}

密切关注类名和名称空间。对您的环境进行必要的调整。

为什么要在视图中而不是控制器中调用该函数,然后简单地返回您需要的所有数据。我已经尝试使用array\u push将国家添加到阵列中,但我认为这不是正确的方法。我已经在用命令呈现模板,如果我再添加一个,我会在for loopYep中得到一个for。做一个过滤器扩展。然后你的小枝将是{{UserIP | ip_country}}是的,函数和过滤器:否。你真的不能把php放在一个小树枝模板里面。采用细枝方式做事或使用不同的模板系统。一旦您完成了这个过程,那么添加一个扩展就很简单了。
{{ O.UserIP | ipcountry }}