हां, आप अकेले नहीं हैं जिनके पास यह समस्या है - मैंने अनगिनत पदों को देखा है जहां लोग दावा करते हैं कि SOAP_ENC_OBJECT के साथ सोपवार को पारित सरणी इस मुद्दे को हल करती है जबकि अन्य लोग अन्य पदों पर अन्यथा दावा करते हैं। और कारणों पर दस्तावेज स्पष्ट नहीं है (मेरे पोस्ट साल पहले php.net के टिप्पणी अनुभाग में)।
एक ही समस्या का सामना करना मैंने PHP SOAP एक्सटेंशन के स्रोतों को पढ़ा है। मूल रूप से वाक्य रचना आप का इस्तेमाल किया है बिल्कुल सही है:
$param = array(
"_" => 'value',
'attrName' => 'attributeName'
);
$p = new SoapVar($param, SOAP_ENC_OBJECT);
क्या प्रलेखन नहीं कहना है: इस वाक्य का उत्पादन हो सकता दो अलग परिणाम (और वास्तव में और भी अधिक: PHP सोप यह आठ अलग अलग तरीकों से व्यक्त कर सकते हैं)। और जैसा कि आप उपरोक्त कोड देख सकते हैं अस्पष्ट है: ऊपर दिए गए कोड में क्या कहा गया है कि 'attrName' एक विशेषता है और तत्व नहीं है? कुछ भी तो नहीं। ऊपर दिए गए कोड में सोप क्लाइंट के लिए पर्याप्त मात्रा में जानकारी नहीं है कि यह तय करने के लिए कि 'attrName' क्या है और इसलिए यह "तत्व" पर डिफ़ॉल्ट है।
सोप क्लाइंट दो मोड में संचालित हो सकता है: गैर-डब्लूएसडीएल और डब्लूएसडीएल। पूर्व मोड में आपको कभी भी नतीजा नहीं मिलेगा: सोप क्लाइंट एरे तत्व को विशेषता में बदलने के लिए प्रकार की जानकारी पर निर्भर करता है। चूंकि टाइप जानकारी गैर-डब्लूएसडीएल मोड में मौजूद नहीं है, सोप क्लाइंट तत्वों के सेट के रूप में प्रदान की गई सरणी का प्रतिनिधित्व करता है - बिल्कुल आपको जो मिला।WSDL मोड प्रकार की जानकारी मौजूद है और इसलिए सोप क्लाइंट तत्वों और विशेषताओं के नामों को जानता है और उन्हें सरणी अनुक्रमणिका में मिलान कर सकता है। यदि आप अपने गुण चाहते हैं तो आपके पास डब्ल्यूएसडीएल मोड में आपका सोप क्लाइंट होना चाहिए।
मूल रूप से आदेश प्राप्त करने के लिए क्या आप चाहते हैं आप के साथ < XSD दस्तावेज़/शाब्दिक मोड में WSDL फ़ाइल की आवश्यकता है में: < XSD में: "स्ट्रिंग XSD" /> उचित अनुभाग में: विशेषता नाम = "attrName" प्रकार = स्कीमा > ब्लॉक।
कुछ लोग गुणों के लिए सरणी उपयोग के बारे में सफलता का दावा करते हैं और अन्य लोगों का कहना है कि "यह काम नहीं करता है" पूरी तरह से उनके सेटअप में निहित है: कुछ लोगों के पास डब्लूएसडीएल फाइलें उपभोग करने के लिए हैं, कुछ लोग सिर्फ नए साबुन क्लाइंट (शून्य , सरणी (...)); (जो निश्चित रूप से उनकी अपेक्षाओं में विफल रहता है)
स्रोत
2016-11-11 21:30:39
जैसा कि व्लादिमीर ऊपर बताया गया है, यह केवल डब्लूएसडीएल मोड में काम करेगा! – jfx