it-swarm-ko.tech

hook_menu 콜백을 통해 JSON 데이터를 어떻게 소비합니까?

Drupal 사이트로 Tropo의 WebAPI를 설정하려고하는데 example.com/tropo에 대한 hook_menu () 콜백을 만든 다음 hook_menu 콜백을 사용한다고 생각했습니다. Tropo (단순한 JSON 데이터 배열이 포함되어 있음)에서 API 호출을 사용하도록 만든 다음 응답합니다.

응답 부분을 아주 쉽게 할 수 있습니다 ... drupal_json_output () 데이터를 작성하고 종료하십시오 (JSON을 기본적으로 반환합니다).

문제가있는 부분은/tropo 메뉴 콜백으로 전송되는 데이터를 얻는 것입니다 ... 다음 중 하나를 사용하여 데이터에 액세스 할 수 없습니다.

$json = file_get_contents("php://input"); // returns NULL

(아래 입력 스트림 모듈을 사용합니다 :)

$json = file_get_contents("drupal://input"); // also returns NULL

다른 모듈의 기능을 확인한 후 hook_init를 사용하여 JSON을 가져 오는 것처럼 보입니다. 이것이 선호되는 방법입니까? 나는 hook_menu에서 그것을하고 내 자신의 경로를 사용하고 싶습니다.

또는 필요에 따라 데이터베이스에 대해 자체 PHP 스크립트를 작성하고 Drupal 외부에서 실행하는 것이 더 좋을까요? bootstrap)?

9
geerlingguy

글쎄, 나는 데이터를 얻는 것으로 밝혀졌지만 그것을 해독하는 것을 잊었다 ...

내 hook_menu 콜백에서 :

$received = file_get_contents("drupal://input"); // Use inputstream module.
$received = json_decode($received, TRUE);

그런 다음 $ received 값으로 원하는만큼 플레이 할 수 있습니다.

또한 inputstream 모듈은 입력 스트림에 두 번 이상 연결할 수 있도록하는 데 매우 중요합니다 (php://input 두 번 이상, 두 번째 및 그 이후의 값은 NULL을 반환합니다.

추가 메모로 오늘 방금 이것을 처리하는 더 간단한 방법 일 수있는 새로운 모듈을 발견했습니다. Content as JSON

2
geerlingguy

REST 서비스 모듈의 일부인 서버는 JSON뿐만 아니라 다른 형식에서도 자동으로이를 수행합니다. http://drupal.org/project/services

또한 Inputstream을 지원합니다 (Inputstream은 OAuth 검증 및 동일한 스트림의 서비스 디코딩)을 처리하도록 구축되었습니다).

2
VoxPelli