Twig变量变量用于方法

6
我尝试做一些在PHP中非常简单的事情,但在twig中并不是那么容易。基本上,我需要调用一个类方法,但我需要能够通过字符串定义要调用的方法。
我有三个方法:getControlvs、getControlnc和getControltr。然而,为了调用这些方法,我需要一个单独的变量来确定要调用哪个方法。
这就是我现在试图调用的内容:
{% set neutPer = key.getControl~neutFaction %}

neutFaction可以是"vs"、"nc"或"tr"。

似乎只触发了key.getControl,然后就没了,连接被丢失了。

有什么想法吗?

先谢谢了!


1
请查看attribute函数。 - Matteo
@Matteo 我在研究中看到过这个,但我不太清楚如何实际使用它。没有使用示例时并不会有所帮助 :S - Matt Cavanagh
1
当然,我会尝试给你举个例子。 - Matteo
@Matteo 我想我已经弄清楚了:{% set neutPer = attribute(key, neutKey) %} - Matt Cavanagh
取决于你如何构建方法名的字符串。是的,也可以。 - Matteo
2个回答

7
你可以使用属性twig函数
首先将字符串连接起来:
{% set method = "getControl" ~ neutFaction %}

然后调用如下:
{{ attribute(key, method) }}

您也可以将参数传递为以下内容:
{{ attribute(key, method, arguments) }}

此外,定义的测试可以检查动态属性是否存在:
{{ attribute(object, method) is defined ? 'Method exists' : 'Method does not exist' }}

1
对于那些寻找我的最终代码的人,这是正确的代码:{% set neutFaction = 'vs' %} {% set neutKey = 'getControl'~neutFaction %} {% set neutPer = attribute(key, neutKey) %} - Matt Cavanagh

-1
尝试使用 {% set neutPer = (key.getControl~neutFaction) %} 或者您可以在将变量传递到 Twig 的控制器 / 服务中更改它,这样您就不需要设置连接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接