Twig 过滤器链和优先级

Twig filter chaining and priorities

我在尝试为多个 Twig 过滤器表达式找到正确的语法时遇到困难。

我有一个名为 floatVar 的变量,它并不总是被定义。

如果定义了,我想把这个浮点数截断到第三位。 如果未定义,我想设置一个空字符串。

我找不到正确的语法:

floatVar|number_format(3, '.','')|default('') // generates a Twig_Error_Runtime exception

floatVar|default('')|number_format(3, '.','') // output "0" in every case

(floatVar|number_format(3, '.',''))|default('') // generates a Twig_Error_Runtime exception

有人能给我指出正确的方向吗?有没有办法用括号来明确表达优先级? 对相关主题的任何帮助或 link 将不胜感激。

祝你有美好的一天。

试试这个

{{ yourelement != null ? yourelement|round(3, 'floor') : '' }}

正确的顺序是:

{{ floatVar|default(0)|number_format(3, '.','') }}
  • default(0) :首先确保 floatVar 具有默认值(即使未定义)
  • number_format(3, '.','') :然后你格式化它

然而,如果没有定义 floatvar,这将打印 0.000。

如果您想在 1 行中完成此操作,您应该考虑创建一个自定义的树枝扩展:http://symfony.com/doc/current/cookbook/templating/twig_extension.html

编辑: 按照@Pierre Olivier 的回答,您应该尝试:

{{ floatVar is defined ? floatVar|number_format(3, '.','') : '' }}

(如果未定义元素,yourelement != null 将引发错误)