Ich bin relativ neu in Soap auf der "Erstellung der Service-Seite", also im Voraus für jede Terminologie, die ich Munging.Ein PHP-Array von einem PHP-SoapServer zurückgeben
Ist es möglich, ein PHP-Array von einem Remote Procedure Soap Service, der mit der SoapServer-Klasse von PHP eingerichtet wurde, zurückzugeben?
Ich habe eine WSDL (gebaut von blind zu folgen ein Tutorial), die zum Teil etwas wie diese Methode Ich rufe
<message name='genericString'>
<part name='Result' type='xsd:string'/>
</message>
<message name='genericObject'>
<part name='Result' type='xsd:object'/>
</message>
<portType name='FtaPortType'>
<operation name='query'>
<input message='tns:genericString'/>
<output message='tns:genericObject'/>
</operation>
</portType>
Die PHP sieht Abfrage genannt wird, und sieht so etwas wie dieses
public function query($arg){
$object = new stdClass();
$object->testing = $arg;
return $object;
}
Dies ermöglicht es mir
$client = new SoapClient("http://example.com/my.wsdl");
$result = $client->query('This is a test');
und Dump Ergebnis wie etwas aussehen zu nennen
object(stdClass)[2]
public 'result' => string 'This is a test' (length=18)
Ich möchte eine native PHP-Array/Sammlung von meiner Abfrage-Methode zurückgeben. Wenn ich meine Abfragemethode ändere, um ein Array zurückzugeben
public function query($arg) {
$object = array('test','again');
return $object;
}
Es ist serialisiert in ein Objekt auf der Clientseite.
object(stdClass)[2]
public 'item' =>
array
0 => string 'test' (length=4)
1 => string 'again' (length=5)
Dies macht Sinn, wie ich in meinem WSDL ein xsd:object
als Ergebnistyp spezifisch haben. Ich möchte, wenn möglich, ein natives PHP-Array zurückgeben, das nicht in ein Objekt eingebettet ist. Mein Instinkt sagt, dass es einen spezifischen xsd: -Typ gibt, der mich das erreichen lässt, aber ich weiß es nicht. Ich würde mich auch damit begnügen, dass das Objekt als ArrayObject
serialisiert wird.
Halten Sie sich nicht zurück, mich in den technischen Details WSDL zu schulen. Ich versuche, ein Verständnis für die zugrunde liegenden Konzepte zu bekommen
Zwei Gründe.Weil das mir ein Array mit einem einzelnen Schlüssel namens "item" geben würde, der mein Array enthält, und noch wichtiger, ich möchte einen Service erstellen, den Endbenutzer verwenden können und ein Array zurückbekommen, ohne es zu casten. –
Und Seife-Enc: Array nicht Ihren Bedürfnissen entsprechen? – hobodave
Beachten Sie jedoch, dass dies nicht rekursiv konvertiert wird. Wenn Sie das Objekt stdClass in tieferen Ebenen Ihrer Antwort haben, werden sie nicht konvertiert. In diesem Fall denke ich nur an Lubosdz 'Antwort. – flu