저는 ZendFramework를 사용하여 Wordpress에 완전한 플러그인을 만들고 지금은 C# import application을 생성해야하기 때문에 webservice에 데이터를 공개하고 싶습니다.Zend Framework 자동 검색으로 Classmap을 존중하지 않습니까?
내가 직면 한 문제는 특정 형식으로 webservice 반환 유형을 설정하더라도 클래스 맵이 시작되어 해당 형식을 변환하지 않는다는 것입니다. 예 :
/**
* Retursn all events registered on the sgm web interface
*
* @return models_event[]
*/
public function getAllEvents(){
return models_event::getEvents();
}
은 models_event 배열에서 반환 된 클래스를 정의합니다. 내가 WSDL 섹션을 시작하면, 나는 복잡한 유형 "models_event"로 추가했지만를 heres 잘못 것을 얻을 : 이벤트에
$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이 서버에 의해 반환 된 클래스와 일치하지 않기 때문에 autodiscovery를 넘겨 줄 수있는 방법이 있어야합니다. 나는 네가 틀렸다는 것을 말하지는 않지만 분명히 우리가 여기에없는 뭔가가있다 ... –
나는 그 클래스의 이름을 바꿀 수 없다는 것에 대해 당신이 말하는 것을 이해한다. 내 구현에서는 적절한 젠드 MVC 스타일로 구현 된 컨트롤러가 있지만'setClass()'에 대한 호출에서 사용되는 클래스에서 드래그 할 때'require_once()'를 사용합니다. – JamesG
나는'AutoDiscover' 클래스가 실제 클래스 나 함수를 제공하는 것에서 만 순전히 작동하는 것 같다고 덧붙였다. 예를 들어, setClass() 메소드는 리플렉션을 사용하여 WSDL의 내용을 처리하는 것처럼 보인다. 클래스의 메서드 이름에서 이름을 임의의 함수 이름 집합으로 매핑 할 수있는 기능이없는 것 같습니다. 그래서 당신의 클래스의 이름을 바꾸고 그것을 수동으로'require_once()'를 사용하여 드래그하는 것이 당신의 유일한 선택 일 것이라고 생각합니다. 또는 클래스 매핑 기능을'Zend_Soap_AutoDiscover'에 추가 할 수 있습니다. :-) – JamesG