调用循环的分支中的函数


Calling a function inside a twig for loop

如何在循环的分支中调用函数。我有一个数据库的数组输出,我在树枝内部这样调用它:

<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>

UserIP将返回IP地址。我想完成的是为每个用户调用下面的函数,并将其添加到表中。

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

现在我知道我不能直接从trick调用函数。我需要添加它作为twig_simplefunction的分支扩展吗?

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

首先创建一个过滤器

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 }}

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