2016-07-05 57 views
0

我試圖將一組嵌套查詢參數傳遞給我的Laravel 5.1 API。我使用$httpParamSerializer(params)序列化對象,這似乎這樣做是正確的GET是這樣的:當我返回從Laravel的$requestLaravel解析嵌套的序列化查詢字符串

GET "http://my-api.localhost/1.0/categories?category=Anatomy&category=Consent+Forms" 

然而,它只顯示屬性中的一種:

Object {category: "Consent Forms"} 

這是爲什麼?

角前端:

 var filters = { 
      category : ['Anatomy', 'Consent Forms'] 
     }; 

     Category.getCategories(filters).then(function(res) { 
      // Object {category: "Consent Forms"} 
      console.log('CATEGORIES', res.data); 

角HTTP請求:

 getCategories: function(params) { 
      var qs = $httpParamSerializer(params); 
      return $http({ 
       method: 'GET', 
       url: url + ver + '/categories?' + qs, 
       headers: Auth.getOAuthHeader(), 
       cache: true 
      }); 
     }, 

Laravel:

public function getCategories(Request $request) { 
    $input = $request->all(); 
    return $input; 

回答

1

的問題是$httpParamSerializer的默認行爲是輸出在同一個密鑰數組的每個值的url,PHP在最後設置的基礎上處理,只有最後一個關鍵值e par已設置。

documentation

{'foo': ['bar', 'baz']} results in foo=bar&foo=baz (repeated key for each array element) 

可以使用$httpParamSerializerJQLike服務來處理由jQuery的.param()啓發URL編碼數據的過程。

隨着$httpParamSerializerJQLike的PARAMS:

category : ['Anatomy', 'Consent Forms'] 

將變爲:

?category[]=Anatomy&category[]=Consent+Forms 

要使用$httpParamSerializerJQLike你需要在控制器中注入它。例如

.controller('AppCtrl', function($scope, $http, $httpParamSerializer, $httpParamSerializerJQLike) { 

使用它序列數據:

getCategories: function(params) { 
    var qs = $httpParamSerializerJQLike(params); 
    return $http({ 
     method: 'GET', 
     url: url + ver + '/categories?' + qs, 
     headers: Auth.getOAuthHeader(), 
     cache: true 
    }); 
},