Zend Framework Classmap не учитывается при автообнаружении? - PullRequest
3 голосов
/ 26 января 2012

Я создаю полный плагин в Wordpress, используя ZendFramework, и теперь я хотел бы предоставить веб-сервис для доступа к данным, потому что мне нужно создать приложение для импорта ac #.

Проблема, с которой я сталкиваюсь, заключается в том, чтонесмотря на то, что я установил тип возвращаемого веб-сервиса определенного типа, таблица классов не включает и не трансформирует тип.Например:

/**
 * 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 Ответ

2 голосов
/ 27 января 2012

С какой версией 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 в основном является просто оболочкой для собственного класса SoapServer PHP, поэтому его интерфейс позволяет получить доступ ко всем опциям предоставляются базовым классом. Я также предполагаю, что опция classmap существует для решения немного другой проблемы, когда вы создаете сервер SOAP на основе ранее существовавшего WSDL и хотели бы отобразить имена WSDL на внутренние имена классов PHP.

Мой совет будет просто переименовать класс models_event в event (или, что еще лучше, Event), что, как мы надеемся, приблизит вас к тому, что вы ищете в WSDL.

...