2015-10-13 45 views
2

在Symfony2的应用中,我使用嫩枝的attribute的函数,在一个通用的方式来显示一个产品的性能:我有属性的名称的数组,并通过它循环我显示属性:嫩枝的属性功能:格式化数字

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

这些性质可以是litteral或数值,例如:

  • 描述:文本
  • number_of_X:整数
  • size_of_Y:浮子(标度= 2)
  • size_of_Z:浮子(标度= 5)

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

size_of_Y:0.42

size_of_Z:0.84848

虽然我想用逗号分隔显示,这种方式:

size_of_Y:0,42

size_of_Z:0,84848

看来我不能使用number_format功能的属性功能之后,因为它会改变我litteral0的,即使我能找到一种方法来测试,如果显示的值是一个数字或litteral值(一个is_numeric ish函数),我将无法确定属性的规模(多少个数字a请输入我应该显示的逗号,这是number_format的第一个参数)。

有没有一种通用的方法来改变Twig如何显示这些属性?

在我的树枝的配置(config.yml),我已经有了:

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

这似乎为应用程序的其它部分,在这里我不使用attribute函数来显示工作性质。

谢谢!

+1

您可能需要编写自己的枝条延伸到处理这个问题:http://symfony.com/doc /电流/食谱/模板/ twig_extension。html –

+0

哇!至少现在我知道什么树枝扩展是...我会试试看,谢谢! – johnkork

+0

您应该创建一个答案,以便我可以验证其他人以查看@CarlosGranados – johnkork

回答

1

你需要编写自己的枝条延伸到处理这个问题:

Twig Extensions

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 %} 
+0

这是一个好主意,但是应用程序很复杂,而且这个解决方案缺乏可维护性,并且考虑到在应用程序中依赖这个attribute()方法的实体的数量,实施起来会很挑剔......谢谢:) – johnkork

+0

所以我不'如果你想让代码清晰,你应该只处理obj并且有一个方法只返回你想要为这个对象显示的属性,为什么你有'arrayProperties'和'obj'。 – COil

+0

这就是我所拥有的,实际上我的arrayProperties来自obj.getPropertiesToDisplay()。检索属性的比例和类型意味着要遍历所有对象(一个LOT),并找出这些对象中每个对象的所有属性(a ... LOT!:)的比例和类型......! – johnkork