9

私は次のコードを持っています:

$telnums = array(10, 20, 30);
$obj = new StdClass();
$obj->telnums = new StdClass();
foreach ($telnums as $telnum) {
    $obj->telnums = $telnum;
}

call_user_func(array($this->client, 'createDomain'), new SoapVar($obj, SOAP_ENC_OBJECT));

$this->client は SoapClient クラスのインスタンスです。

そして、次のリクエストを生成します。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="...">
    <SOAP-ENV:Body>
        <ns1:createDomain>
            <createDomainRequest>
                <telnums>30</telnums>
            </createDomainRequest>
        </ns1:createDomain>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

しかし、私は必要です

            <createDomainRequest>
                <telnums>10</telnums>
                <telnums>20</telnums>
                <telnums>30</telnums>
            </createDomainRequest>

どうすればこれを達成できますか?

PS: PHP 5.2.6-3ubuntu4.5 with Suhosin-Patch 0.9.6.2 (cli) (ビルド: Jan 6 2010 22:25:33)

前もって感謝します!

4

6 に答える 6

8

正しい答えは次のとおりです。

$options = array(
  'createDomainRequest' => array(
    'telnums' => array(
      '10',
      '20',
      '30'
    )
  )
);

:)

于 2011-06-03T01:22:29.933 に答える
1

有効な解決策を見つけるのは骨の折れる作業ですが、最終的にはそれほど難しくありません。SoapParam を使用することで、驚くほど簡単ですっきりとします。

$soapClient = new SoapClient($wsdl);
$soapClient->__call('createDomain', array(
    new SoapParam('10', 'telnums'),
    new SoapParam('20', 'telnums'),
    new SoapParam('30', 'telnums'),
));
于 2015-01-05T15:54:51.743 に答える
-1

SoapClient を拡張して __doRequest() メソッドをオーバーライドすることで修正し、ここで説明されているようにリクエストを変更します: http://www.php.net/manual/en/soapclient.dorequest.php#57995

私にはひどいように見えますが、「今ここ」で機能します。

于 2010-09-02T11:26:59.287 に答える