2014-12-19 3 views
2

슬림 프레임 워크 (Windows XAMPP에서 실행)에서 PUT 요청 본문을 가져 오는 데 관한 모든 대답을 읽은 것 같습니다. 해결책 중 아무 것도 나를 위해 작동하지 않는 것, 그래서 어쩌면 내가 놓친 또 다른 경고가 있습니다.Slim에서 PUT 요청 본문 NULL

내 PHP 코드는 다음과 같습니다

require 'Slim/Slim.php'; 

\Slim\Slim::registerAutoloader(); 
$app = new \Slim\Slim(); 
$app->run(); 

$app->put('/calendar/update/:id', function($id) use ($app){ 
    $ev = json_decode($app->request()->getBody()); 
    echo var_dump($ev); // NULL 
} 

내가 PHPStorm에서 REST 테스터에서 테스트되었습니다 매개 변수와 쿼리 문자열을 사용하여 두 - 아무 소용합니다. 명시 적으로 내 ajax 호출에서 contentType: application/x-www-form-urlencoded을 설정하려고했습니다.

+0

응용 프로그램/x-www-form-urlencoded를 잘못 요청합니다. 대신 application/json을 사용하십시오. –

+0

@MikaTuupola 감사합니다.하지만 json은 '$ app-> contentType ('application/json ')을 통해 슬림 앱에서 기본값으로 설정됩니다.'- x-www ...를 테스트 시도로만 사용했습니다. – user776686

답변

1

-Josh

비슷한 문제가 있었다. 양식을 사용하여 입 {요청을 보내는 경우. 이 숨겨진 필드를 양식에 추가하십시오. 또한 $ app-run()을 이동하는 것을 잊지 마십시오. 마지막 줄까지. JSON에 대한

<input type="hidden" name="_METHOD" value="PUT"/> 

http://docs.slimframework.com/routing/put/

2

$app->contentType() 메소드는 HTTP 클라이언트로 다시 슬림에서 보낸 HTTP 응답에 영향을 ... 여기 잃어버린 것 같다. 위의 예 에서처럼 요청 본문을 구문 분석하려는 경우 Mika가 HTTP 요청의 Content-Type 헤더를 application/json으로 변경한다고 제안했습니다.

또한 경로를 정의한 후에 만 ​​$app->run()을 호출해야합니다. 위의 예는 경로 앞에 $app->run()을 호출합니다.

희망이 도움이됩니다.