2015-10-13 48 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