2014-05-20 3 views
13

검색했지만 답변을 찾지 못했습니다. 기본 CRUD를 관리하는 RESTful API가 있습니다. PUT을 사용하여 업데이트 메서드를 만들려고하는데 params 값을 검색 할 수 없습니다. 내가 요청을 만들기 위해 Postman을 사용하고, 내 요청과 같이 보인다 :Slim으로 PUT 매개 변수 가져 오기 PHP

URL

http://localhost/api/update/987654321 

에 Params

id = 987654321 
name = John Smith 
age = 35 

PHP

$app = new Slim(); 
$app->put('/update/:id', function($id) use($app){ 
    var_dump([ 
     'id' => $id, 
     'name' => $app->request->put('name'), 
     'age' => $app->request->put('age') 
    ]); 
}); 

var_dump() 결과는 다음과 같습니다

array(3) { 
    ["id"]=> 
    string(9) "987654321" 
    ["name"]=> 
    NULL 
    ["age"]=> 
    NULL 
} 

에 어떤 문제가 있습니까? 어떤 생각?

+1

체크 아웃을 수동 http://docs.slimframework.com/#Request-Body 경우를 시도 할 수 있습니다 변수 요청 섹션으로 스크롤하면 그곳에 예제가 있습니다. 또는 parse_str (file_get_contents ("php : // input"), $ post_vars); ' – mic

+0

요청을 통해 이미지를 업로드하고 싶을 때 본문에서 직접 매개 변수를 가져 와서 var에 넣을 수 있습니다. ''POST''를 사용하여 업데이트하는 것은 나쁜 일입니까? – bodruk

+1

죄송합니다. 내 의견은 'POST'데이터가 아니기 때문에 다른 사이트에서 코드를 복사했습니다. 그러나 PUT 데이터는 GET 이외의 다른 모든 유형의 요청과 마찬가지로 요청 본문에 설정됩니다 (GET 요청에 본문 문자열을 첨부 할 수는 있지만 시도하지는 않았습니다). 당신은'parse_str ($ app-> request-> getBody(), $ vars);'할 수 있고, var_dump를 사용하여 데이터를 볼 수 있습니다. – mic

답변

20

나는 동일한 문제가있었습니다. 첫째, Postman 옵션을 사용하여 PUT 데이터를 보내 "Form-Data"로 인코딩 했으므로 Slim이 param 값을 가져 오지 못했습니다.

W3에서 설명한 것처럼 파일, 비 ASCII 데이터 및 이진 데이터가 포함 된 양식을 제출하려면 "multipart/form-data"콘텐츠 유형을 사용해야합니다.

우리의 경우 우편 배달부 옵션 "x-www-form-urlencoded"(P3 데이터는 W3의 "application/x-www-form-urlencoded"설명 참조)로 보내야합니다.

+2

x-www-form-urlencoded로 변경하여 우편 배달부에서 작동하게하십시오! 답변을 잘 주셔서 감사합니다 (w3 링크)! –

+1

방금 ​​나에게 머리를 질질 끌며 몇 시간을 절약했습니다. 고맙습니다! – Joel

+0

이것은 방금 다른 Google 검색을 저장했습니다! –

1

$app->request->put() null 값을 반환

Screenshot of the right Postman option selected ...

그래서 u는 $app->request->params 대신