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.

Другие вопросы по тегам