2012-03-08 52 views
1

快速問題的最佳做法。Symfony2,Twig JSON模板vs json_encode:什麼是正確的這種情況

我有一個AJAX應用程序,其中有4條路線全部返回jQuery使用的jQuery。

我目前使用這樣的事情在控制器

return new Response(json_encode($some_array)); 

在一個地方結束時,我用JMSSerializer,因爲我想的對象傳遞出來的Javascript保護屬性。這似乎是不對的,我想知道如何將對象知道如何將其所有屬性編碼爲JSON並將其作爲其方法的返回值發送出去。

無論如何,我今天早上有一個腦波,我應該要做的是製作一個Twig JSON模板,它包含我希望它輸出的確切格式,然後從PHP填充變量。在對象內輸出對象集合也需要一些循環。

這種方式有一個明確的承諾/合同,從PHP返回到Javascript的確切內容,如果我碰巧遇到了這種問題,就不會搞砸了。改變對象。我懷疑這對於那些正在學習javascript的人來說會更容易理解,因爲模板比PHP更容易閱讀。

我在正確的軌道上:我應該使用JSON樹枝模板而不是一般的json_encode?

編輯(同時回到了牧場)

由於張貼這個問題,我的研究說:

嫩枝JSON模板VS json_encode

  • 將消除需要JMSSerializer,而不是非法獲取 受保護的對象屬性。
  • 更具可讀性/可預測性,特別是對於另一方的Javascript人員。
  • Twig將檢查變量是否存在如果JSON不能夠 與期望的格式相匹配,將立即標記,因爲例如,對象改變了。所以更難以打破 Javascript和PHP之間的友誼。
  • 單元測試也會這樣做(並且可以驗證值),但可以稍後添加。
  • 將內部對象與外部接口(即模式)分離,我們避免了關於json_encode或JMSerializer如何構成JSON的任何不需要的細節。把我作爲一個人來完全控制輸出的JSON。
  • 會比json_encode()
  • 「我會避免使用模板來呈現數據爲逃避數據等方面的責任是然後在模板中說:」 Symfony2: Echoing JSON From a Controller for Use in an ExtJS 4 Grid
  • 手段做{{變量名慢| json_encode |原始}}很多:請參閱http://twig.sensiolabs.org/doc/filters/json_encode.html(原始意味着關閉自動轉義)
  • 「只要返回JSON數據作爲來自控制器的響應,Symfony不需要執行模板階段就會更有效率」Content length: 0 in a json response Symfony2
+0

亞當 - 我會建議將你的問題中的'應該'改爲更具體的東西。 「應該」取決於誰在回答問題,並可能就整個問題展開辯論。 – 2012-03-08 17:02:05

回答

1

如果你擔心的是沒有合同,那麼也許你應該寫一個單元測試。它可能會更進一步,因爲您可以通過這種方式獲得屬性值的合同。

+0

這是一個很好的建議。我已經閱讀了關於單元測試的Symf2書,但尚未實現。我可以看到這會強制執行合同,但我的問題是最佳模式是什麼。從格式隱含的Controller中揮霍JSON是否可行?是否有更好的原因,例如執行速度?或者是明確的「這個PHP將總是產生這個JSON'更清晰的閱讀,因此更好? – 2012-03-08 16:04:04

+0

我明白了......如果你想分開關注點,如果你希望視圖與你的模型無關,我認爲你應該使用模板。當且僅當視圖應該在模型更改後立即更新時,您應該使用'json_encode'。 – greg0ire 2012-03-08 16:50:28

相關問題