2015-07-07 5 views
9

Mi dispiace per il mio inglese. Sto cercando di ricostruire il mio vecchio server soap su Yii2.Come formattare Yii2 Soap Server Response uguale al mio Old Php Soap Service

Non è stato possibile formattare i nomi degli elementi come nella risposta del servizio precedente.

Come posso farlo?

La risposta del servizio storico è

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://api.xxx.com"> 
    <SOAP-ENV:Body> 
     <ns1:GetAllColorsResponse> 
     <describedColorArray> 
      <DescribedColor> 
       <id>6</id> 
       <Name>beyaz</Name> 
       <HTMLColorCode>#000000</HTMLColorCode> 
      </DescribedColor> 
      <DescribedColor> 
       <id>2</id> 
       <Name>kırmızı</Name> 
       <HTMLColorCode>#FF0000</HTMLColorCode> 
      </DescribedColor> 
      <DescribedColor> 
       <id>4</id> 
       <Name>mavi</Name> 
       <HTMLColorCode>#0000FF</HTMLColorCode> 
      </DescribedColor> 
      <DescribedColor> 
       <id>1</id> 
       <Name>sarı</Name> 
       <HTMLColorCode>#909000</HTMLColorCode> 
      </DescribedColor> 
      <DescribedColor> 
       <id>3</id> 
       <Name>turuncu</Name> 
       <HTMLColorCode>#FF9900</HTMLColorCode> 
      </DescribedColor> 
      <DescribedColor> 
       <id>5</id> 
       <Name>yeşil</Name> 
       <HTMLColorCode>#009000</HTMLColorCode> 
      </DescribedColor> 
     </describedColorArray> 
     </ns1:GetAllColorsResponse> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Yii2 risposta del servizio sapone è

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://newapi.xxx.com/api/GetAllColors?ws=1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <SOAP-ENV:Body> 
     <ns1:GetAllColorsResponse> 
     <return xsi:type="ns2:Map"> 
      <item> 
       <key xsi:type="xsd:string">describedColorArray</key> 
       <value xsi:type="ns2:Map"> 
        <item> 
        <key xsi:type="xsd:string">DescribedColor</key> 
        <value SOAP-ENC:arrayType="ns2:Map[6]" xsi:type="SOAP-ENC:Array"> 
         <item xsi:type="ns2:Map"> 
          <item> 
           <key xsi:type="xsd:string">id</key> 
           <value xsi:type="xsd:int">6</value> 
          </item> 
          <item> 
           <key xsi:type="xsd:string">name</key> 
           <value xsi:type="xsd:string">beyaz</value> 
          </item> 
         </item> 
         <item xsi:type="ns2:Map"> 
          <item> 
           <key xsi:type="xsd:string">id</key> 
           <value xsi:type="xsd:int">2</value> 
          </item> 
          <item> 
           <key xsi:type="xsd:string">name</key> 
           <value xsi:type="xsd:string">kırmızı</value> 
          </item> 
         </item> 
         <item xsi:type="ns2:Map"> 
          <item> 
           <key xsi:type="xsd:string">id</key> 
           <value xsi:type="xsd:int">4</value> 
          </item> 
          <item> 
           <key xsi:type="xsd:string">name</key> 
           <value xsi:type="xsd:string">mavi</value> 
          </item> 
         </item> 
         <item xsi:type="ns2:Map"> 
          <item> 
           <key xsi:type="xsd:string">id</key> 
           <value xsi:type="xsd:int">1</value> 
          </item> 
          <item> 
           <key xsi:type="xsd:string">name</key> 
           <value xsi:type="xsd:string">sarı</value> 
          </item> 
         </item> 
         <item xsi:type="ns2:Map"> 
          <item> 
           <key xsi:type="xsd:string">id</key> 
           <value xsi:type="xsd:int">3</value> 
          </item> 
          <item> 
           <key xsi:type="xsd:string">name</key> 
           <value xsi:type="xsd:string">turuncu</value> 
          </item> 
         </item> 
         <item xsi:type="ns2:Map"> 
          <item> 
           <key xsi:type="xsd:string">id</key> 
           <value xsi:type="xsd:int">5</value> 
          </item> 
          <item> 
           <key xsi:type="xsd:string">name</key> 
           <value xsi:type="xsd:string">yeşil</value> 
          </item> 
         </item> 
        </value> 
        </item> 
       </value> 
      </item> 
     </return> 
     </ns1:GetAllColorsResponse> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Yii2 Codice Controller è

public function actions() 
{ 
    return [ 
     'GetAllColors' => [ 
      'class' => 'mongosoft\soapserver\Action', 
      'serviceOptions' => [ 
       'disableWsdlMode' => true, 
      ] 
     ] 
    ]; 
} 

/** 
* @return array 
* @soap 
*/ 
public function GetAllColors() 
{ 
    $model = GeneralColor::find()->orderBy('name')->asArray()->all(); 
    foreach($model as $m){ 
     $row['id'] = $m['id']; 
     $row['name'] = $m['name']; 

     $rows['describedColorArray']['DescribedColor'][] = $row; 
    } 
    return $rows; 
} 
+1

Yii 2.0 non ha server SOAP quindi è necessario utilizzare un'estensione. Si prega di specificare quale. –

+0

@SamDark Sto usando l'estensione del server soap di mongosoft. Puoi vederlo nella funzione azioni. Grazie. –

risposta

1

Provare a utilizzare le classi PHP e definirle come tipi complessi utilizzando l'attributo "classMap". Nessun danno imposta la versione SOAP richiesta (il valore predefinito è "null").

Ad esempio:

public function actions() 
{ 
    return [ 
     'GetAllColors' => [ 
      'class' => 'mongosoft\soapserver\Action', 
      'serviceOptions' => [ 
       'disableWsdlMode' => true, 
       'soapVersion' => '1.1' 
      ], 
      'classMap' => [ 
       'DescribedColor' => 'GeneralColor' 
      ] 
     ] 
    ]; 
} 

public function GetAllColors() 
{ 
    $model = GeneralColor::find()->orderBy('name')->asArray()->all(); 

    return array("describedColorArray" => $model); 
} 
0

cercare di @return object non @return array

e aggiungere somecode

$std = new \stdClass(); 

return $std