2013-05-25 3 views
1

CakePHP 2.3.5를 사용하여 RESTful 서비스를 작성하려고합니다. 지금까지 나는 작업중인 리소스에 대한 GET 함수를 성공적으로 만들었습니다. example.com/areas.json 또는 example.com/areas/1.json에게 GET 요청을 보낼 수 있으며 데이터베이스에 데이터를 반환합니다.CakePHP REST Put/Post not accepting data

그러나 편집 기능이 작동하기 시작했습니다. 나는 단순히 $this->request->data에서 들어오는 데이터를 저장하는 간단한 편집 방법을 썼습니다. Postman을 사용하여 기능을 테스트하고 PUT 또는 POST를 통해 원시 JSON을 example.com/areas/1.json으로 보내면 데이터를 저장할 수 없다는 메시지가 나타납니다. 내가 실패했을 때 메소드가 더 많은 정보를 보내도록했고, 들어오는 데이터가 $this->request->data 또는 $this->data에 없다는 것을 알려줍니다.

저는 인터넷에서 이와 유사한 문제에 대한 해결책을 찾고 있었지만 지금까지 시도한 모든 것은 실패했습니다. CSRF 검사를 비활성화하고 SecurityComponent를 모두 비활성화하고 보안과 관련된 여러 가지 다른 수정을 시도했습니다. 요청을 소유 한 사람들이 검은 색으로 변경되었습니다.

누군가 내가 CakePHP에서 요청으로 JSON 데이터를 받아들이려고 시도 할 수있는 다른 생각이 있습니까? 도움이 필요한 경우 아래 편집 기능이 포함됩니다.

public function edit($id) 
{ 
    $this->Area->id = $id; 
    $message['request-data'] = $this->request->data; 
    if ($this->Area->save($this->request->data)) { 
     $message['response'] = $this->Area->findById($id); 
    } else { 
     $message['response'] = "Error"; 
    } 
    $this->set(array(
     'message' => $message, 
     '_serialize' => array('message') 
    )); 
} 

답변

3

첫째, 요청의 콘텐츠 형식이 응용 프로그램/JSON 있는지 확인합니다.

둘째, CakePHP는 JSON 페이로드를 자동으로 디코딩하지 않습니다. 당신은 그것을 수동으로해야만합니다. manual에서 :

// Get JSON encoded data submitted to a PUT/POST action 
$data = $this->request->input('json_decode'); 
+0

친절에 감사드립니다. 나는 json_decode가 [REST] (http://book.cakephp.org/2.0/en/development/rest.html#accepting-input-in-other-formats)의 매뉴얼 섹션을 기반으로 자동 호출 될 것이라고 생각했다. . "기본적으로 들어오는 JSON/XML 입력 데이터를 디코딩 할 것"이라고 말하지만 실제로는 그렇지 않습니다. –