Twig的属性函数:格式化数字

时间:2015-10-13 12:37:35

标签: symfony twig

在Symfony2应用程序中,我使用Twig的attribute函数以通用方式显示产品的属性:我有一系列属性名称,并在其中循环显示属性:< / p>

{% for property in arrayProperties %}
    {{ attribute(entity, property)|trans }}
{% endfor %}

这些属性可以是文字或数字,例如:

  • description:text
  • number_of_X:整数
  • size_of_Y:float(scale = 2)
  • size_of_Z:float(scale = 5)

问题是浮动属性以这种方式显示:

  

size_of_Y:0.42

     

size_of_Z:0.84848

虽然我想用逗号分隔符显示,但这样:

  

size_of_Y:0,42

     

size_of_Z:0,84848

似乎我无法在属性函数之后立即使用number_format函数,因为它会转换0中的 litteral 值,即使我能找到一种方法来测试显示的值是否为数字或小数值(is_numeric ish函数),我仍然无法确定属性的大小(多少个数字)在我应该显示的逗号之后,这是number_format)的第一个参数。

是否有通用方法来更改Twig显示这些属性的方式?

在我的Twig配置中( config.yml ),我已经拥有:

number_format:
    decimals: 0
    decimal_point: ','
    thousands_separator: ' '

这似乎适用于应用程序的其余部分,我不会使用attribute函数来显示属性。

谢谢!

2 个答案:

答案 0 :(得分:1)

因此,在arrayProperties中定义其他类型,添加类型和比例,以便您可以在循环中进行测试,因此不要为trans调用数值。

{% for property_name, property_infos in properties %}
    {% if property_infos.type == 'numeric' %}
        {{ attribute(obj, property_name)|number_format(property_infos.scale, ',', ',') }}<br/>
    {% else %}
        {{ attribute(obj, property_name)|trans }}<br/>
    {% endif %}
{% endfor %}

答案 1 :(得分:1)

您需要编写自己的Twig扩展来处理此问题:

Twig Extensions