私は比較的「サービス面を作る」ということでSoapを使い慣れています。PHP SoapServerからPHP配列を返す
PHPのSoapServerクラスを使用してセットアップされたリモートプロシージャーソープサービスからPHP配列を返すことはできますか?
私は(盲目的チュートリアルに従うことによって構築された)WSDLの部分で、この<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>
ようになり、ことを私が呼んでいるPHPの方法は、クエリの名前、およびこの
ようになりますされている
public function query($arg){
$object = new stdClass();
$object->testing = $arg;
return $object;
}
これは私がようになります
$client = new SoapClient("http://example.com/my.wsdl");
$result = $client->query('This is a test');
と結果のダンプを呼び出すことができます
object(stdClass)[2]
public 'result' => string 'This is a test' (length=18)
私のクエリメソッドからネイティブのPHP配列/コレクションを返したいとします。クエリメソッドを変更して配列を返す場合
public function query($arg) {
$object = array('test','again');
return $object;
}
クライアント側のオブジェクトにシリアル化されています。
object(stdClass)[2]
public 'item' =>
array
0 => string 'test' (length=4)
1 => string 'again' (length=5)
私は私のWSDLの結果の型としてxsd:object
特定しましたので、これは、理にかなっています。可能であれば、ObjectでラップされていないネイティブPHP配列を返すようにしたいと思います。私の本能は、これを実現する特定のxsd:タイプがあると言いますが、わかりません。私はまた、ArrayObject
としてシリアル化されているオブジェクトを解決します。
技術的な詳細については、WSDLを教えてください。私は基本的な概念を把握しようとしています
2つの理由。それは私の配列を含む "item"という名前の単一のキーを持つ配列を与え、より重要なのは、エンドユーザーが使用できるサービスを作成し、それをキャストすることなく配列を取得したいということです。 –
soap-enc:Arrayはあなたのニーズに合っていませんか? – hobodave
これは再帰的に変換されないことに注意してください。したがって、stdClassオブジェクトがレスポンスの深いレベルにある場合、変換されません。この場合、私が考えることができる唯一の方法は、lubosdzの答えです。 – flu