it-swarm-eu.dev

Jak mohu spotřebovat data JSON prostřednictvím zpětného volání hook_menu?

Snažím se nastavit Tropo's WebAPI pomocí webu Drupal) a myslel jsem si, že bych si vytvořil zpětné volání hook_menu () například.com/tropo, a pak použijte zpětné volání hook_menu vytvořené pro spotřebu volání API z Tropo (které obsahuje jednoduché pole dat JSON), poté odpovězte.

Dokážu udělat část odpovědi velmi snadno ... sestavení dat, drupal_json_output () a exit (což v podstatě vrací JSON).

Část, se kterou mám potíže, je získání dat, která jsou odeslána do zpětného volání/tropo menu ... Nemohu získat přístup k žádným datům pomocí některého z následujících:

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

(níže používá modul vstupního proudu :)

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

Zkontroloval jsem, co některé jiné moduly dělají, a vypadá to, že používají hook_init k uchopení JSON. Je to upřednostňovaná metoda? Rád bych to dokázal v hook_menu a použil svou vlastní cestu a tak ...

Nebo bych měl raději psát svůj vlastní PHP skript a běžet mimo Drupal), pokud to potřebuji, dělám pro databázi bootstrap) pro databázi?

9
geerlingguy

Ukázalo se, že jsem získával data, ale zapomněl jsem je dekódovat ...

V mém zpětném volání hook_menu:

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

Pak si můžu hrát s tolik, kolik bych chtěl, s hodnotou $ obdrženou.

Navíc modul inputstream je neocenitelný, protože mi umožňuje dostat se do vstupního proudu více než jednou (pokud se pokusíte použít php://input více než jednou, podruhé a následující, vrátí NULL).

Jako dodatečnou poznámku jsem si právě dnes všiml nový modul, který by mohl být ještě jednodušším způsobem řešení: Obsah jako JSON

2
geerlingguy

Server REST, který je součástí modulu Services) to automaticky provádí pro JSON i pro jiné formáty: http://drupal.org/project/services

Podporuje také Inputstream (Inputstream byl vytvořen pro zpracování jak OAuth ověření, tak dekódování služeb stejného proudu).

2
VoxPelli