2015-01-09 5 views
1

저는 초보자입니다. 클라이언트 측에 AngularJs GUI로 만든 테스트 응용 프로그램과 서버 측에 PHP API를 작성했습니다.

이 내가 우체부와 I를 사용할 때 내가

$post_a = json_decode($app->request->getBody()); 
//$post_b = $app->request->post(); //this would be empty 

를 사용하여 내가 슬림에 POST를 잡을 수있는 각도 응용 프로그램에서 책을 제출하면 요청

myApp.factory('Book', ['$resource', 'API_URL', function($resource, API_URL){ 

    return $resource(API_URL + '/books/:bookId', {bookId: '@bookId'}, { 
     get: { method: 'GET', isArray:true }, 
     update: { method: 'PUT'}, 
     save: { method: 'POST'}, 
     delete: {method:'DELETE'}, 
    }); 

}]); 

을 처리하는 각 서비스입니다 POST를 수행합니다. 사용하여 Slim에서 POST를 잡을 수 있습니다.

//$post_a = json_decode($app->request->getBody()); // this would be empty 
$post_b = $app->request->post(); 

나는 왜 그런가? s의 차이. 설명해 주시겠습니까?

그냥 $ app-> request-> post();로 게시물을 잡으려고하지 않습니다. 두 경우 모두? Angular에서 오는 포스트가 $ app-> request-> getBody()로만 잡힐 수있는 이유는 무엇입니까?

답변

5

$app->request->post() 메서드는 application/x-www-form-urlencoded 요청에 제출 된 키/값 데이터를 검색합니다. 요청에서 다른 콘텐츠 유형 (예 : application/json)을 사용하는 경우 $app->request->getBody() 메소드로 원시 요청 본문을 검색하고 필요에 따라 디코딩 할 수 있습니다. 추가 질문이 있으면 알려주십시오.

+0

하를 생성 할 것입니다 JSON 형식의 데이터입니다 : 다음은이 REST 서비스를 호출하는 방법을 예입니다! 알겠습니다, 고마워요! 내 요점은 또한 우편 배달부와 엔드 포인트를 테스트하는 방법을 이해하고 지금은 "응용 프로그램/json"헤더 본문 - 유형을 설정해야 볼 본문은 "원시"가 있어야하고 json 같은 포함해야합니다 { "title": "new title"} 모든 것이 작동합니다. – wwr

-1

감사합니다. Josh. 답장이 저에게 효과적입니다.

에 따를 절차 :

1.You는 다음과 같이 원시 탭에서 JSON 형식으로 요청을 보낼 필요가 :

{"username":"admin","password":"admin"} 

2.You는 헤더에 application/jsonContent-Type를 설정해야합니다.

그게 전부이며 작동 할 것입니다.

0

당신은 여전히 ​​

$ post_b = $ APP-> 요청 -> 포스트() 슬림의

를 사용할 수 있습니다.

JSON 대신 형식 값으로 데이터를 전달하여 html 양식 (AngularJS)에서이 REST 서비스를 호출하는 한. AngularJS에 JSON 형식의 데이터가있는 경우 먼저 형식으로 변환해야합니다.

Object.toparams = function ObjecttoParams(obj) { 
 
    var p = []; 
 
    for (var key in obj) { 
 
     p.push(key + '=' + encodeURIComponent(obj[key])); 
 
    } 
 
    return p.join('&'); 
 
}; 
 

 
$http({ 
 
    method: 'POST', 
 
    url: url, 
 
    data: Object.toparams(myobject), 
 
    headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
 
})

인 myObject가