2014-05-09 67 views
1

我使用Laravel資源控制器爲我的各種SPA創建了一個API,該控制器的用處與魅力一樣。儘管BackboneJS對默認的JSON響應沒有任何問題,但EmberJS期望將結果包裝在單個和複數名爲JSON對象中,具體取決於是否獲取單個模型或一組模型。如何正確包裝對象中的JSON數據庫結果

我已經知道

  • 轉換JSON結果到一個數組包裝它,並將其轉換回JSON。
  • 將每個結果包裹在一個對象中。
  • 將來自數據庫調用的結果更改爲setFetchMode(PDO::FETCH_ASSOC);

問題
如何正確(使用最廉價的過程)創建包裹JSON響應,因此無需轉換結果來回JSON,數組或對象之間?

距離Laravel資源控制器SNIPPIT:

<?php 

class ResourceController extends Controller { 

    ... 

    /** 
     * Display a listing of the resource. 
     * 
     * @return Response 
     */ 
    public function index() { 
      return Model::all(); 
    } 


    /** 
     * Display the specified resource. 
     * 
     * @param int $id 
     * @return Response 
     */ 
    public function show($id) { 
      return Model::find($id); 
    } 

    ... 

} 
+0

您可以在服務器端使用包裝格式,併爲backbone.js做額外的工作。看到我的答案[這裏](http://stackoverflow.com/questions/23558679/how-to-properly-wrap-a-json-database-result-within-an-object/23558993#23558993)例如 –

回答

1

這將封裝了原始Eloquent數據庫結果用於與被配置爲"fetch" => PDO::FETCH_CLASS數據庫的Laravel應用。它創建Illuminate\Database\Eloquent\Collection的新對象,並將Eloquent結果包含在models屬性中。這樣,它的格式正確,可以與Ember數據一起使用,無需任何轉換。

/** 
* Display a listing of the resource. 
* 
* @return Response 
*/ 
public function index() { 
    $index = new Illuminate\Database\Eloquent\Collection; 
    $index['models'] = Model::all(); 
    return $index; 
} 
0

你可以做到這一點與下面的結構。總是,以包裝格式返回你的json響應(我假設你有用戶模型);

{ 
    "user": [ 
     {"name": "Hüseyin"}, 
     {"surname": "BABAL"}, 
     {"title": "Software Developer"} 
    ] 
} 

這適用於ember.js。對於backbone.js,你需要做一些額外的簡單工作,如跟隨;

var User = Backbone.Collection.extend({ 
    model: User, 
    url: '/api/userInfo', 
    parse: function(response) { 
      return response.user; 
     }); 
    } 
}); 

通過這樣做,你就只有一種格式休息服務,你只需要爲唯一backbone.js

更新做一些額外的工作:

想想index的動作,可以那樣做;

public function index() { 
    return Response::json(array("user" => Model::all())); 
} 

結果將與"user"地擠包,您可以使用響應作爲前端JSON。結果將是;

{ 
    "user": [ 
     {...}, 
     {...} 
    ] 
} 
+0

嘿侯賽因,那實際上是我在問題中提供的。我需要知道如何使用Laravel(PHP)以優雅的方式打包結果。我寫的東西已經寫完了,就像BackboneJS的魅力一樣。 – sidneydobber

+0

@sidneydobber你可以在你的關於在控制器上返回json部分的問題中陳述你的代碼嗎?我可以很好的幫你 –

+0

@sidneydobber你可以看到我的更新回答 –

相關問題