Zend Framework Classmap не учитывается при автообнаружении?
Я создаю полный плагин в Wordpress, используя ZendFramework, и теперь я хотел бы предоставить веб-сервис для доступа к данным, потому что мне нужно создать приложение для импорта # #.
Проблема, с которой я сталкиваюсь, заключается в том, что, хотя я устанавливаю тип возвращаемого веб-сервиса определенного типа, таблица классов не включает и не трансформирует тип. Например:
/**
* Retursn all events registered on the sgm web interface
*
* @return models_event[]
*/
public function getAllEvents(){
return models_event::getEvents();
}
определяет, что класс возвращается в массиве models_event. Если я запускаю секцию WSDL, я получаю сложный тип, добавляемый как "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();
Я класс сопоставил 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[] и комплексный тип models_event... Я все испортил... Почему он это делает?
1 ответ
С какой версией Zend Framework вы работаете?
В версии, которую я смотрю (1.11.10), Zend_Soap_AutoDiscover
не принимает массив опций в качестве одного из аргументов конструктора. Подпись метода для конструктора выглядит следующим образом:
public function __construct($strategy = true, $uri=null, $wsdlClass=null)
classmap
опция, на которую вы ссылаетесь, находится в Zend_Soap_Server
и, IMO, существует главным образом потому, что Zend_Soap_Server является в основном просто оболочкой для нативного PHP SoapServer
класс, так что его интерфейс позволяет получить доступ ко всем параметрам, которые предоставляются базовым классом. Я также предполагаю, что это classmap
Опция существует для решения немного другой проблемы, когда вы создаете сервер SOAP на основе ранее существовавшего WSDL и хотели бы сопоставить имена WSDL с внутренними именами классов PHP.
Мой совет будет просто переименовать models_event
класс для event
(или, еще лучше, Event
), которая, мы надеемся, приблизит вас к тому, что вы ищете в WSDL.