Bir hook_menu geri araması yoluyla JSON verilerini nasıl tüketirim?


9

Ben bir Drupal sitesi ile Tropo WebAPI kurmaya çalışıyorum ve ben sadece örnek.com/tropo için bir hook_menu () geri arama oluşturmak, sonra Tropo ( basit bir JSON veri dizisi içerir), ardından yanıtlayın.

Yanıt bölümünü oldukça kolay yapabilirim ... veri oluşturmak, drupal_json_output () ve çıkmak (sadece temelde JSON döndürür).

Sorun yaşadığım bölüm / tropo menü geri çağrısına gönderilen verileri almak ... Aşağıdakilerden birini kullanarak herhangi bir veriye erişemiyorum:

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

(aşağıda giriş akışı modülü kullanılmıştır :)

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

Bazı diğer modüllerin ne yaptığını kontrol ettim ve JSON'u kapmak için hook_init kullanıyor gibi görünüyorlar. Bu tercih edilen yöntem midir? Ben hook_menu bunu yapmak ve kendi yolumu ve benzeri kullanmak isterdim ...

Alternatif olarak, kendi PHP betiğimi yazmak ve Drupal'ın dışında çalıştırmak, sadece gerekirse veritabanı için bir bootstrap yapmak daha iyi olurdu?


Menü geri araması hangi verileri alır ve bu verileri menü geri aramasına (harici bir sunucu veya başka bir şey) ne aktarır? Veri formatını kontrol edebilir misiniz?
kiamlaluno

Gönderen: php.net/manual/tr/wrappers.php.php : "php: // input, istek gövdesinden ham verileri okumanıza izin verir. POST isteklerinde, bağımlı olmadığı için $ HTTP_RAW_POST_DATA tercih edilir Ayrıca, $ HTTP_RAW_POST_DATA'nın varsayılan olarak doldurulmadığı durumlarda, always_populate_raw_post_data'yı etkinleştirmek için daha az bellek yoğun bir alternatiftir. php: // girişinin enctype = "multipart / form-data" ." Bu seninle alakalı mı?
Berdir

Ben php: // giriş denedim, ama hiçbir şey almak gibi görünüyor. İnputstream kullanırken, drupal: // input '1' döndürür :(
geerlingguy

@kiamlaluno - Tropo sunucularından URL / tropo'ya gönderilen verileri almaya çalışıyorum; arayanın telefon numarasını içeren bazı JSON gönderdiler ve buna yanıt vermem gerekiyor. Ama
JSON'a ulaşamıyorum

Yanıtlar:


2

Verileri alıyordum, ama kodunu çözmeyi unuttum ...

Hook_menu geri aramda:

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

Sonra $ alınan değeri ile istediğim kadar oynayabilir.

Ayrıca, giriş akışı modülü, giriş akışına birden çok kez girmeme izin vermede paha biçilmezdir ( php://inputbirden fazla, ikinci kez ve sonradakileri kullanmayı denerseniz NULL döndürür).

Ek bir not olarak, bugün bunu daha basit bir şekilde ele alabilecek yeni bir modül fark ettim: İçerik JSON olarak


4
İki yıl sonra Google aramalarım beni tamamen geri getiriyor.
geerlingguy

Bu durumda kimin istekte bulunduğunu (JSON'u göndererek) kimlik doğrulamasını nasıl ele alırsınız?
sheldonkreger

Yukarıda sunulan çözümün biraz daha açıklaması. wunderkraut.com/blog/…
sheldonkreger

2

Hizmetler modülünün bir parçası olan REST Sunucusu bunu JSON ve diğer biçimler için otomatik olarak yapar: http://drupal.org/project/services

Ayrıca Inputstream'i destekler (Inputstream, aynı akışın hem OAuth doğrulamasını hem de Servislerin kodunu çözmek için oluşturulmuştur).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.