2016-07-05 10 views
0

Laravel 5.1 APIにネストされたクエリパラメータのセットを渡そうとしています。Laravelはネストされたシリアライズされたクエリ文字列を解析します

:私はLaravelから $requestを返すとき、それは性質の一つだけを示し、それでも

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

:私はGETがどのように見えるとして、それを正しく行うように見えるオブジェクトを、シリアライズ$httpParamSerializer(params)を使用しています

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のデフォルトの動作は、出力に同じキーであります最終的に設定されたキーで処理するPHPの配列の各値に対するURL e parが設定されます。 documentationから

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

あなたはjQueryの.param()に触発されたURLエンコードデータのプロセスを処理するために$httpParamSerializerJQLikeサービスを使用することができます。

$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 
    }); 
}, 
関連する問題