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


9

Drupal 사이트로 Tropo의 WebAPI를 설정하려고하는데 example.com/tropo에 대해 hook_menu () 콜백을 만든 다음 Tropo에서 API 호출을 소비하기 위해 방금 만든 hook_menu 콜백을 사용한다고 생각했습니다. 여기에는 간단한 JSON 데이터 배열이 포함되어 있습니다).

응답 부분을 아주 쉽게 할 수 있습니다 ... 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 외부에서 실행하여 데이터베이스에 대한 부트 스트랩을 수행하는 것이 더 좋을까요?


메뉴 콜백은 어떤 데이터를 가져오고 해당 데이터를 메뉴 콜백 (외부 서버 등)으로 전달하는 것은 무엇입니까? 데이터 형식을 제어 할 수 있습니까?
kiamlaluno

From : php.net/manual/en/wrappers.php.php : "php : // input을 사용하면 요청 본문에서 원시 데이터를 읽을 수 있습니다. POST 요청의 경우 $ HTTP_RAW_POST_DATA를 선호합니다. 특별한 php.ini 지시어. 또한 $ HTTP_RAW_POST_DATA가 기본적으로 채워지지 않은 경우 always_populate_raw_post_data를 활성화하는 것보다 메모리를 덜 사용하는 대안입니다. php : // input은 enctype = "multipart / form-data"와 함께 사용할 수 없습니다 " 그게 당신과 관련이 있습니까?
Berdir

php : // input을 시도했지만 아무것도 얻지 못하는 것 같습니다. 나는 inputstream의, 드루팔을 사용하고 있습니다 때 : // 입력 반환 '1':(
geerlingguy

@kiamlaluno-Tropo 서버에서 URL / tropo에 데이터를 게시하려고합니다. 그들은 발신자의 전화 번호가 포함 된 일부 JSON을 제출하므로 응답해야합니다. 하지만 JSON에 접속할 수 없으므로 전화 번호에 접속할 수 없습니다 :(
geerlingguy

답변:


2

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

내 hook_menu 콜백에서 :

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

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

또한, 의 InputStream 모듈은 나를 두 번 이상 입력 스트림을 얻을 수있는 소중한입니다 (사용하려고하는 경우 php://input, 한 번 이상 두 번째로, 그 다음은, NULL을 반환합니다).

추가 참고 사항으로 오늘 방금 처리하는 훨씬 간단한 방법 인 새로운 모듈을 발견 했습니다 .Content as JSON


4
2 년 후, Google 검색으로 인해 다시 한 번 돌아올 수있었습니다.
geerlingguy

이 상황에서 누가 요청을하는지 (JSON 전송) 인증을 어떻게 처리합니까?
sheldonkreger

위에서 제시 한 솔루션에 대해 좀 더 설명하겠습니다. wunderkraut.com/blog/…
sheldonkreger

2

서비스 모듈의 일부인 REST 서버는 JSON 및 기타 형식에 대해 자동으로이를 수행합니다. http://drupal.org/project/services

또한 입력 스트림을 지원합니다 (입력 스트림은 동일한 스트림의 OAuth 확인 및 서비스 디코딩을 모두 처리하도록 구축 됨).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.