2016-07-05 1 views
0

내 Laravel 5.1 API에 중첩 된 쿼리 매개 변수 집합을 전달하려고합니다. 내가 $httpParamSerializer(params)에게 직렬화 GET의 모습으로 제대로 할 것 같다 개체, 사용하고 있습니다 :중첩 된 직렬화 된 쿼리 문자열을 구문 분석하는 Laravel

: 아직

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

, 내가 Laravel에서 $request을 반환 할 때를, 그것의 속성 중 하나만 보여줍니다

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가 마지막으로 설정 한 기준으로 처리하므로 마지막 키 값만 파가 설정됩니다. 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를 사용하려면 당신은 컨트롤러에 주입 할 필요가있다.

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

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

사용이 데이터를 직렬화