2011-07-27 37 views
0

我在PHP中使用SoapClient類來發出請求。我試圖創建一個嵌套的頭變量來傳遞我的請求。PHP - 使用SoapClient創建嵌套的SOAP標頭

目前我請求頭看起來像這樣,

<SOAP-ENV:Header> 
    <ns2:type>request</ns2:type> 
    ... 
</SOAP-ENV:Header> 

我希望它看起來像這樣,

<SOAP-ENV:Header> 
    <ns2:ei> 
     <ns2:type>request</ns2:type> 
     ... 
    </ns2:ei> 
</SOAP-ENV:Header> 

目前我正在創造這樣的標題,

$headers[] = new SoapHeader(
     $nsp1, 
     "type", 
     "request" 
    ); 
$headers[] = new SoapHeader(...) 

我已嘗試過各種方法來嵌套標頭,包括

$headers[] = new SoapHeader(
    $nsp1, 
    "ei", 
    new SoapHeader(
     $nsp1, 
     "type", 
     "request" 
    ) 
); 

但這會引發致命錯誤。

回答

1

您可以嘗試使用一個對象或數組作爲$數據參數

對象:

<?php 
class MySoapHeader 
{ 
    public $type = 123; 
    public $value = 'UNKNOWN'; 
} 

$headers1[] = new SoapHeader(
     'n1', 
     'ei', 
     new MySoapHeader() 
    ); 

print_r ($headers1); 
?> 

給出

Array ([0] => SoapHeader Object ([namespace] => n1 [name] => ei 
    [data] => MySoapHeader Object ([type] => 123 [value] => UNKNOWN) 
    [mustUnderstand] =>)) 

陣列:

<?php 
    $headers2[] = new SoapHeader(
     'n1', 
     'ei', 
     array ('type'=>123,'value'=>'UNKNOWN') 
    ); 

    print_r ($headers2); 
?> 

給出

Array ([0] => SoapHeader Object ([namespace] => n1 [name] => ei 
    [data] => Array ([type] => 123 [value] => UNKNOWN) [mustUnderstand] 
    =>)) 
1

不能創建嵌套的情況下,你可以嘗試像這些

//Untested 
$strHeaderComponent_Ei = "<ei><type>$strType</type></ei>"; 

$objVar_Ei_Inside = new SoapVar($strHeaderComponent_Ei, XSD_ANYXML, null, null, null); 
$objHeader_Ei_Outside = new SoapHeader($nsp1, 'ei', $objVar_Ei_Inside); 
+0

使用Re0sless的方法似乎是爲我工作。我想避免寫出XML。感謝另一種解決方法。 – sissonb