1

現在、Zend_Soap_AutoDiscover を使用して WSDL ファイルを生成しています。問題は、この wsdl で ArrayOfString ( string[] ) 型の出力を処理することです。そのため、複合型戦略を Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence に変更しました。正常に動作しますが、問題は、出力が実際には文字列の配列ではないことです。出力 xml は次のようなものです。

<xsd:complexType name="ArrayOfString">
    <xsd:sequence>
        <xsd:element name="item" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
</xsd:complexType>

しかし、私はこのような出力が欲しい:

<xsd:complexType name="ArrayOfstring">
    <xsd:complexContent>
        <xsd:restriction base="soapenc:Array">
            <xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/>
        </xsd:restriction>
    </xsd:complexContent>
</xsd:complexType>

そこで、新しい戦略 Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex を使用しましたが、問題は、この戦略が string[] を処理しないことです。

最後に -> どうすればいいですか :D?!

4

1 に答える 1

2

次のように、属性を 1 つだけ持つ応答クラスを作成してみてください。

class Response
{
    /** @var string[] */
    public $items;
}

次に、タイプ のオブジェクトを返すサービス クラスをResponse次のように定義します。

class Service
{
    /**
     * @param string
     * @return Response
     */
    public function process( $input )
    {
        $response = new Response();
        // Populate $response->items[] object with strings...
        return $response;
    }
}

次に、を使用して WSDL を作成する'Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex'ときの戦略を使用します。Zend_Soap_Autodiscoverこれはおそらくあなたが求めている出力を正確に生成するわけではありませんが、現在得ているものよりも意味的に近いものを生成するはずです. このアプローチの鍵は、PHPDoc を正しく理解することです。

それでも問題が解決しない場合は、コードの重要な部分を投稿してください。問題をより迅速に解決するのに役立ちます。

于 2010-03-19T12:15:20.267 に答える