私は「サービス側の作成」という点でSoapに比較的慣れていないので、私が変更している用語については事前に謝罪します。
PHPのSoapServerクラスを使用してセットアップされたリモートプロシージャSoapサービスから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メソッドはqueryという名前で、次のようになります。
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)
xsd:object
これは、WSDLの結果タイプとしてaを指定したので、理にかなっています。可能であれば、オブジェクトにラップされていないネイティブPHP配列を返したいと思います。私の本能は、これを達成できる特定のxsd:typeがあると言っていますが、わかりません。また、シリアル化されるオブジェクトをとして解決しますArrayObject
。
WSDLの技術的な詳細で私を教育することをためらわないでください。基礎となる概念を把握しようとしています