2014-07-04 63 views
3

據我瞭解它正確JMSSerializerBundle的反序列化與symfony表單組件相同時,當一個控制器獲得一個post/put/patch請求?Symfony Restful Post:JMSSerializerBundle vs Symfony表單組件

因此,無論我創建一個symfony自定義formType爲例如一個UserType,當我得到一個請求時,我會做一些類似$ form-> handleRequest($ request)的事情,或者我使用JMSSerializerBundle將請求反序列化到最終存儲的文檔/實體。

有沒有人有這兩種方法的經驗?目前我只熟悉表單的方式...我應該選擇哪一個?

我說的應用程序純粹是Restful,沒有樹枝html模板,FOSRestbundle正在做所有的RESTful路由。

+0

我有完全相同的問題。我應該使用串行器組件還是表單組件來處理POST/PUT?看來Serializer更適合REST? – Geany

回答

3

在我們的restfull API中,我們通常使用JMSSerializerBundle來處理實體的反序列化,然後使用Symfony Validator component來確保實體在推送/更新數據庫之前滿足所有必需的條件。工作得很好,比表單組件輕。

無論如何,表單組件將無法反序列化json/xml,因此您必須使用JMSSerializerBundle。

+0

聽起來很可行。當我調用「$ form-> handleRequest($ request)」時,它最終是否負責處理請求中的數據反序列化的JMSSerializerBundle? –

+0

你如何處理驗證錯誤? –

+0

[這個鏈接](http://williamdurand.fr/2012/08/02/rest-apis-with-symfony2-the-right-way/#post-it)有一個很好的用例來解釋你所需要的(狀態碼,錯誤序列化,...)它在反序列化實體後使用了表單組件,但正如我們上面所討論的那樣,您可以直接使用驗證器組件來代替簡單情況。 – rolebi

0

Symfony \ Form組件優於JMS Serializer的好處在於驗證在反序列化之前完成,並且符合PHP 7嚴格的輸入。示例情況 - 您傳遞一個數組而不是字符串,JMS創建並且對象,並且getter引發一個\TypeError而不是來自驗證程序的驗證錯誤。