私はWordpressでZendFrameworkを使って完全なプラグインを作成しましたが、今はC#インポートアプリケーションを作成する必要があるため、Webサービスからデータにアクセスしたいと考えています。Zend Frameworkクラスマップは自動検出によって尊重されませんか?
私が直面している問題は、Webサービスの戻り値の型を特定の型に設定しても、クラスマップがキックインして型を変換していないということです。例:
/**
* Retursn all events registered on the sgm web interface
*
* @return models_event[]
*/
public function getAllEvents(){
return models_event::getEvents();
}
は、クラスがmodels_event配列で返されることを定義します。私は、WSDLのセクションを起動した場合、私は間違って何をHERES「models_event」として追加複合型を取得しますが:
$autodiscover = new Zend_Soap_AutoDiscover(array(
'classmap' => array(
'event' => "models_event",
),
'encoding' => 'utf-8'
));
$autodiscover->setComplexTypeStrategy(new Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex());
$autodiscover->setClass('models_webservice');
$autodiscover->handle();
Iクラスイベントにmodels_eventをマッピングされました。だから私のWSDLは、複合型エクスポートする必要があります。
<xsd:complexType name="ArrayOfmodels_event">
<xsd:complexContent>
<xsd:restriction base="soap-enc:Array">
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:models_event[]"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="models_event">
<xsd:all/>
</xsd:complexType>
をしかし、あなたはそれがmodels_event [] COMPLEXEタイプとmodels_event複合型を返すされて見ることができるように...私は、すべての理由、それはやっている...めちゃくちゃですこの?
答えに感謝しますが、Zend Autoloaderを使用している私のオートローディング戦略の一部であるため、クラスの名前を変更できません。クラスマップに関しては、WSDLがサーバーによって返されるクラスと一致しないため、自動検出に渡す方法が必要です。私はあなたが間違っていると言っているわけではありませんが、ここに欠けているものは間違いありません。 –
私はクラスの名前を変更できないということを理解しています。私の実装では、コントローラは適切なZend MVCスタイルで実装されていますが、 'setClass()'の呼び出しで使用されるクラスでドラッグするのに 'require_once()'を使います。 – JamesG
また、 'AutoDiscover'クラスは、あなたが提供する実際のクラスや関数から純粋に機能しているように見えます。例えば、 'setClass()'メソッドは、リフレクションを使ってWSDLの内容を解決するように見えます。あなたのクラスのメソッド名からの名前と任意の関数名のセットへのマッピングを許可する機能はないようです。だから私はあなたのクラスの名前を変更し、 'require_once()'を使って手動でドラッグすることがあなたの唯一の選択肢かもしれないと思います。あるいは、クラスマッピング機能を 'Zend_Soap_AutoDiscover'に追加することもできます。 :-) – JamesG