2013-04-14 5 views
0

기본적으로 Codeigniter에 일부 JSON 페이로드가 포함 된 POST 요청을 보내고 있습니다. 나는 RESTAdapater를 사용한다. JSON은 키가없는 상태로 전송되므로 액세스 할 수 없습니다. 내가 POST 요청이 $this->input("key")이다 액세스 할 표준적인 방법을 사용하여 CI에EmberJS의 키로 JSON 페이로드 래핑

App.BookmarksNewController = Ember.ObjectController.extend({ 
    save: function(){ 
     this.get("model.transaction").commit(); 
     this.get("target").transitionTo("bookmarks"); 
    } 
}); 

REST에서 구현 :

여기
App.Bookmark = DS.Model.extend({ 
    title: DS.attr("string"), 
    url : DS.attr("string") 
}); 

이 컨트롤러 : 여기

는 모델입니다. 그러나 위 요청이 생성되면 원시 JSON 데이터 만 전송됩니다. 따라서 어떤 식 으로든 그것을 참조 할 수있는 방법이없는 것처럼 보입니다.

string(48) "{"bookmark":{"title":"sdffdfsd","url":"sdfsdf"}}" 

내가보고 싶은 것은 :

function post(){ 
    $this->response(var_dump(file_get_contents("php://input")),200); 
} 

날이 출력을 제공합니다 :

이 예제를 가지고

string(48) payload="{"bookmark":{"title":"sdffdfsd","url":"sdfsdf"}}" 

그런 다음 서버는 내가 할 수있을 것입니다 이 JSON에 액세스하려면 $this->post("payload").

그래서 1 of 2입니다. 어쨌든 JSON 페이로드를 키로 감쌀까요? 아니면 아무 키를 사용하여 CI에서 원시 JSON 데이터에 액세스 할 수 있습니까 ??

+0

$ array = json_decode ($ payload); 항목을 배열로 제공하여 원하는 방식으로 참조 할 수 있습니다. – ahmad

+0

왜 키없이 액세스하지 않습니까? $ this-> – intuitivepixel

+0

게시 가능성이 높습니다. PHP의 기본 구현 때문일 수도 있습니다. 유효한 쿼리 문자열이나 그와 같은 것이 아닌 경우 $ _POST 배열에 등록되지 않습니다. 그냥 file_get_contents ("php : // input")로 JSON에 액세스하는 것이 좋을까요 ?? – galdikas

답변

0

제 자신이 알아 냈습니다 (또는 예제를 올바르게 읽었 음).

Phil Sturgeons의 Adam Whitney의 포크 REST controller for CodeIgniter을 사용할 때 JSON 페이로드는 $this->_post_args에서 사용할 수 있습니다. 그리고 기본 구현에서 그는 이미 언급 한 file_get_contents("php://input")을 사용합니다.

EDIT : 다른 유형의 요청에도 동일한 규칙이 적용됩니다. 예를 들어 DELETE 요청 데이터는 $this->_delete_args에서 사용할 수 있습니다. 또는 $this->_args은 모든 유형의 args를 찾을 수있는 "마술"장소입니다.