我正在使用帶有Restangular庫的AngularJS來處理用Symfony2 + JMS Serializer + FOS Rest Bundle編寫的Rest Api。通過AngularJS發送到Symfony2的對象/表單的驗證REST API
爲了在用戶實體執行CRUD操作第一,我得到特定用戶顯示:
var User = Restangular.one('users', $routeParams.userId);
User.get()
.then(function(response) {
$scope.user = response;
});
我收到這樣的JSON響應:
{
id: 1,
firstName: "Howell",
lastName: "Weissnat",
job: {
id: 1
name: "Job Name"
}
}
然後我想修改job
場用戶實體內部。喬布斯在Symfony 2後端基本上是獨立的實體(更像是價值對象),與用戶實體有ORM關係。
然後我通過AngularJS修改前端上的用戶,例如從選擇框中的可用選項中選擇作業。的$scope.user
JSON表示將看起來像這樣:
{
id: 1,
firstName: "Howell",
lastName: "Weissnat",
job: {
id: 2
name: "Job Second Name"
}
}
然後我就與Restangular PUT請求:
$scope.user.save();
不幸的是Symfony2的期望接收對象是這樣的:
{
id: 1,
firstName: "Howell",
lastName: "Weissnat",
job: 2
}
凡job: 2
基本上指向工作實體的ID。
我成功地處理了這個問題,在後端的UserType
類中創建了ViewTransformer。這將基本上將收到的作業對象轉換爲具有ID值的標量整數。 symfony.com/doc/current/cookbook/form/data_transformers.html
$builder->get('job')->addViewTransformer
不過,我覺得這是不正確的做法和現在我想不出還有什麼更好的主意的。將更復雜的對象發送到Symfony2 RESTful後端的最佳做法是什麼?這只是一個簡單的例子,但在我的應用job
User類中的字段也可以包含Job
實體的集合。
我們基本上做的是,反序列化使用JMS(使用Doctrine對象的構造函數,而不是JMS的)東西,將它併入doctrinemanager和沖洗..聽起來太簡單了,它是那麼容易!和您也可以簡單地使用驗證器服務,在刷新之前實際驗證您的實體 –