1

Zend_Soap_Server を使用して、PHP の自動検出モードを使用して Web サービスを作成しています。phpDoc またはその他の方法を使用して、特定の変数/関数パラメーターで制限 (minOccurs、maxOccurs) を生成する方法を知りたいと思っていました。

次のように、関数 say でこの phpDoc を使用している場合myFunction

 /**
 *
 * @param   string $param1  Parameter One
 * @param   string $param2  Parameter Two
 * @return  array  $return
 */

WSDL で次のメッセージが表示されます。

<message name="myFunctionIn">
  <part name="param1" type="xsd:string"/>
  <part name="param2" type="xsd:string"/>
</message>
<message name="myFunctionOut">
  <part name="return" type="soap-enc:Array"/>
</message>

param1したがって、関数 params( & param2) の使用minOccursを制限したい場合maxOccurs、WSDL メッセージが次のようになるようにするにはどうすればよいですか。

 <message name="myFunctionIn">
  <part name="param1" minOccurs="0" maxOccurs="1" type="xsd:string"/>
  <part name="param2" minOccurs="1" maxOccurs="1" type="xsd:string"/>
 </message>

インターネットで検索しましたが、有益な情報は見つかりませんでした。ありがとう!

4

4 に答える 4

1

In case some people are still interested... there is a reasonably simple patch posted on a zend framework mailing list here. It allows to define minOccurs and maxOccurs in the following style:

/** 
* @var string ___FOR_ZEND_minOccurs=0 ___FOR_ZEND_maxOccurs=1 
*/ 
public $Username;

which is translated in the WSDL to:

<xsd:element name="Username" type="xsd:string" nillable="true" maxOccurs="1" minOccurs="0"/>

The necessary code changes need to be inserted after line 58 which looks like:

($element->setAttribute('type', $this->getContext()->getType(trim($matches[1][0])));)

code to be inserted:

$tempo = $property->getDocComment(); 
if (preg_match('/___FOR_ZEND_minOccurs\s*=\s*(\d+|unbounded)/',$tempo,$matches)) { 
    $element->setAttribute('minOccurs', $matches[1]); 
} 
if (preg_match('/___FOR_ZEND_maxOccurs\s*=\s*(\d+|unbounded)/',$tempo,$matches)) { 
  $element->setAttribute('maxOccurs', $matches[1]); 
}

Obviously, you could adapt those regular expressions if you prefer a different pattern for your definitions.

于 2016-05-01T18:36:02.997 に答える
0

複雑な型の変更されたコードを含む提案が見つかりましたが、それが実装されたかどうかはわかりませんし、まだテストする機会もありません. チェックアウト:

http://framework.zend.com/wiki/display/ZFPROP/Zend_Soap_Wsdl_Strategy_DefaultComplexType+-+Improvement+for+the+AutoDiscover+-+Jeannie+BOFFEL

于 2014-06-25T16:47:01.267 に答える
0

最近のプロジェクトで、これに対する答えを探していました。私の知る限り、これは現在のバージョンの ZF では不可能です (「バグ」を参照)。

AutoDiscovery は、最も基本的な WSDL 生成のみを対象としていると思います。または、少なくとも現在のバージョンはそうです。おそらく、将来のリリースはより包括的になります。

テンプレートを使用して、より複雑な制約を手動で作成するための出発点として最適です。または、特定の要件を処理する独自のクラスを作成することもできます (この質問への回答のコメントで示唆されているように) 。

于 2012-07-18T20:29:40.720 に答える