मैं एक हुक_मेनू कॉलबैक के माध्यम से JSON डेटा का उपभोग कैसे करूं?


9

मैं एक ड्रुपल साइट के साथ ट्रोपो के वेबएपीआई को स्थापित करने की कोशिश कर रहा हूं, और मैंने सोचा कि मैं उदाहरण के लिए बस एक हुक_मेनू () कॉलबैक बनाऊंगा। तब हुक_मेनू कॉलबैक का उपयोग करें जिसे मैंने ट्रोपो (एपीआई कॉल) का उपभोग करने के लिए बनाया था जिसमें एक साधारण JSON डेटा होता है), तब प्रतिक्रिया दें।

मैं बहुत आसानी से प्रतिक्रिया भाग कर सकता हूं ... डेटा, ड्रुपल_जसन_आउटपुट () और बाहर निकलें (जो कि मूल रूप से जेएसएन लौटाता है) का निर्माण करें।

जिस हिस्से से मुझे परेशानी हो रही है वह उस डेटा को प्राप्त कर रहा है जिसे / tropo मेनू कॉलबैक पर भेजा गया है ... मैं निम्नलिखित में से किसी एक का उपयोग करके किसी भी डेटा तक नहीं पहुँच सकता:

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

(नीचे इनपुटस्ट्रीम मॉड्यूल का उपयोग करता है :)

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

मैंने जाँच की कि कुछ अन्य मॉड्यूल क्या करते हैं, और ऐसा लगता है कि वे JSON को हथियाने के लिए hook_init का उपयोग करते हैं। क्या यह पसंदीदा तरीका है? मुझे हुक_मेनू में ऐसा करने में सक्षम होना पसंद है और मैं अपने रास्ते का उपयोग करता हूं और ऐसे ...

वैकल्पिक रूप से, क्या मुझे अपनी खुद की PHP स्क्रिप्ट लिखना और ड्रुपल के बाहर चलना, डेटाबेस के लिए बूटस्ट्रैप करना बेहतर होगा यदि मुझे ज़रूरत है?


मेनू कॉलबैक को कौन सा डेटा मिलेगा, और उन डेटा को मेनू कॉलबैक (एक बाहरी सर्वर, या कुछ और) में क्या पारित कर रहा है? क्या आप डेटा प्रारूप को नियंत्रित कर सकते हैं?
kiamlaluno

प्रेषक: php.net/manual/en/wrappers.php.php : "php: // इनपुट आपको अनुरोध बॉडी का कच्चा डेटा पढ़ने की अनुमति देता है। POST अनुरोधों के मामले में, यह $ HTTP_RAW-POST_DATA के लिए बेहतर है क्योंकि यह निर्भर नहीं करता है। विशेष php.ini निर्देश। इसके अलावा, उन मामलों के लिए जहां $ HTTP_RAW_POST_DATA डिफ़ॉल्ट रूप से आबादी नहीं है, यह हमेशा संभावित रूप से कम मेमोरी गहन विकल्प है जो हमेशा सक्रिय करने के लिए वैकल्पिक है_populate_raw_post_data। php: // input enctype = "multipart / form-data" के साथ उपलब्ध नहीं है। । " क्या यह शायद आपके लिए प्रासंगिक है?
बेरिर

मैंने कोशिश की है php: // इनपुट, लेकिन लगता है कि कुछ भी नहीं है। जब मैं
इनपुटस्ट्रीम

@kiamlaluno - मैं ट्रोपो सर्वर से URL / ट्रोपो में डेटा पोस्ट करने की कोशिश कर रहा हूं; वे कुछ JSON प्रस्तुत करते हैं जिसमें एक कॉलर का फोन नंबर है, और मुझे इसका जवाब देने की आवश्यकता है। लेकिन मुझे JSON पर नहीं मिल सकता है, इसलिए मैं फोन नंबर पर नहीं मिल सकता :(
geerlingguy

जवाबों:


2

ठीक है, यह पता चला है कि मुझे डेटा मिल रहा था, लेकिन मैं इसे डिकोड करना भूल गया ...

मेरे हुक_मेनू कॉलबैक में:

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

तब मैं $ प्राप्त किए गए मूल्य के साथ जितना चाहे उतना खेल सकता हूं।

इसके अतिरिक्त, इनपुटस्ट्रीम मॉड्यूल मुझे एक से अधिक बार इनपुट स्ट्रीम में लाने में अमूल्य है (यदि आप php://inputएक से अधिक बार उपयोग करने का प्रयास करते हैं , दूसरी बार, और इसके बाद वाले, NULL को वापस कर देंगे)।

एक अतिरिक्त नोट के रूप में, मैंने अभी एक नया मॉड्यूल देखा है जो इसे संभालने का एक सरल तरीका हो सकता है: कंटेंट जोंस के रूप में


4
दो साल बाद, और मेरी Google खोजों ने मुझे पूर्ण-चक्र वापस ला दिया।
geerlingguy

आप इस स्थिति में अनुरोध करने वाले (JSON भेजने वाले) प्रमाणीकरण को कैसे संभालते हैं?
शेल्डनक्रेगर

यहाँ ऊपर प्रस्तुत समाधान का थोड़ा और विवरण दिया गया है। wunderkraut.com/blog/…
sheldonkreger

2

REST सर्वर जो सेवा मॉड्यूल का हिस्सा है, JSON के साथ-साथ अन्य प्रारूपों के लिए स्वचालित रूप से ऐसा करता है: http://drupal.org/project/services

यह इनपुटस्ट्रीम का भी समर्थन करता है (इनपुटस्ट्रीम को OAuth सत्यापन और एक ही धारा के डिकोडिंग दोनों सेवाओं को संभालने के लिए बनाया गया था)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.