Spec-Zone.ru › Yii 1.1

CWebService

Пакет system.web.services
Наследование class CWebService » CComponent
С версии 1.0
Исходный код framework/web/services/CWebService.php
CWebService инкапсулирует SoapServer и предоставляет веб-сервис на основе WSDL.

Требуется расширение PHP SOAP.

CWebService использует CWsdlGenerator и может генерировать WSDL на лету, без необходимости написания сложных WSDL. Однако генератор WSDL можно настроить через свойство generatorConfig.

Для генерации WSDL на основе блоков комментариев документации в классе поставщика услуг, вызовите generateWsdl или renderWsdl. Для обработки запросов веб-сервиса, вызовите run.

Свойства публичного доступа

Свойство Тип Описание Определено в
actor string актор SOAP-сервиса. CWebService
cacheID string идентификатор компонента кэша приложения, используемого для кэширования сгенерированного WSDL. По умолчанию «cache», что относится к основному компоненту кэша. Установите свойство в false, чтобы отключить кэширование WSDL. CWebService
classMap array список классов, объявленных как сложные типы в WSDL. CWebService
encoding string кодировка веб-сервиса. CWebService
generatorConfig string|array конфигурация генератора WSDL. CWebService
methodName string имя запрошенного метода. CWebService
persistence integer режим сохранения SOAP-сервера. CWebService
provider string|object класс или объект поставщика веб-сервиса. CWebService
serviceUrl string URL веб-сервиса. CWebService
soapVersion string версия SOAP (например, '1. CWebService
wsdlCacheDuration integer количество секунд, в течение которого сгенерированное WSDL может оставаться действительным в кэше. CWebService
wsdlUrl string URL для WSDL. CWebService

Свойства защищенного доступа

Свойство Тип Описание Определено в
options array параметры для создания экземпляра SoapServer CWebService

Методы публичного доступа

Метод Описание Определено в
__call() Вызывает метод, который не является методом класса. CComponent
__construct() Конструктор. CWebService
__get() Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. CComponent
__isset() Проверяет, является ли значение свойства нулевым. CComponent
__set() Устанавливает значение свойства компонента. CComponent
__unset() Устанавливает свойство компонента в значение null. CComponent
asa() Возвращает объект поведения по имени. CComponent
attachBehavior() Присоединяет поведение к компоненту. CComponent
attachBehaviors() Присоединяет список поведений к компоненту. CComponent
attachEventHandler() Присоединяет обработчик событий к событию. CComponent
canGetProperty() Определяет, может ли свойство быть прочитано. CComponent
canSetProperty() Определяет, может ли свойство быть установлено. CComponent
detachBehavior() Отсоединяет поведение от компонента. CComponent
detachBehaviors() Отсоединяет все поведения от компонента. CComponent
detachEventHandler() Отсоединяет существующий обработчик событий. CComponent
disableBehavior() Отключает присоединённое поведение. CComponent
disableBehaviors() Отключает все присоединённые к этому компоненту поведения. CComponent
enableBehavior() Включает присоединённое поведение. CComponent
enableBehaviors() Включает все присоединённые к этому компоненту поведения. CComponent
evaluateExpression() Вычисляет выражение PHP или обратный вызов в контексте этого компонента. CComponent
generateWsdl() Генерирует WSDL, определённое поставщиком. CWebService
getEventHandlers() Возвращает список присоединённых обработчиков событий для события. CComponent
getMethodName() Возвращает имя запрошенного метода. Пусто, если метод не запрашивается. CWebService
handleError() Обработчик ошибок PHP. CWebService
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, есть ли присоединённые обработчики для указанного события. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
raiseEvent() Вызывает событие. CComponent
renderWsdl() Генерирует и отображает WSDL, определённое поставщиком. CWebService
run() Обрабатывает запрос веб-сервиса. CWebService

Методы защищенного доступа

Метод Описание Определено в
getOptions() Возвращает параметры для создания экземпляра SoapServer CWebService

Подробности свойств

actor свойство

public string $actor;

актор SOAP-сервиса. По умолчанию null, то есть не задан.

cacheID свойство

public string $cacheID;

идентификатор компонента кэша приложения, используемого для кэширования сгенерированного WSDL. По умолчанию «cache», что относится к основному компоненту кэша. Установите свойство в false, чтобы отключить кэширование WSDL.

classMap свойство

public array $classMap;

список классов, объявленных как сложные типы в WSDL. Это должен быть массив со WSDL типами в качестве ключей и именами PHP классов в качестве значений. PHP класс также может быть указан как псевдоним пути.

См. также

  • http://www.php.net/manual/ru/soapserver.soapserver.php

encoding свойство

public string $encoding;

кодировка веб-сервиса. По умолчанию 'UTF-8'.

generatorConfig свойство (доступно начиная с версии 1.1.12)

public string|array $generatorConfig;

настройки генератора WSDL. Это свойство может быть полезным для расширения возможностей стандартного класса CWsdlGenerator, например, для добавления поддержки xsd:xsd:base64Binary элементов. Другое применение — изменение начальных значений при создании объекта по умолчанию CWsdlGenerator. Значение этого свойства будет передано в Yii::createComponent для создания объекта генератора. Значение по умолчанию — 'CWsdlGenerator'.

methodName свойство только для чтения

public string getMethodName()

имя текущего запрашиваемого метода. Пустая строка, если метод не запрашивается.

options свойство только для чтения

protected array getOptions()

опции для создания экземпляра SoapServer

См. также

  • http://www.php.net/manual/ru/soapserver.soapserver.php

persistence свойство

public integer $persistence;

режим сохранения SOAP-сервера.

См. также

  • http://www.php.net/manual/ru/soapserver.setpersistence.php

provider свойство

public string|object $provider;

класс или объект поставщика веб-сервиса. Если указано имя класса, это может быть псевдоним пути.

serviceUrl свойство

public string $serviceUrl;

URL веб-сервиса. Это необходимо для generateWsdl() и renderWsdl().

soapVersion свойство

public string $soapVersion;

версия SOAP (например, '1.1' или '1.2'). По умолчанию null, что означает не задано.

wsdlCacheDuration свойство

public integer $wsdlCacheDuration;

количество секунд, в течение которого сгенерированный WSDL может оставаться действительным в кэше. По умолчанию 0, что означает отсутствие кэширования.

wsdlUrl свойство

public string $wsdlUrl;

URL для WSDL. Это необходимо для run().

Подробное описание методов

__construct() метод

public void __construct(mixed $provider, string $wsdlUrl, string $serviceUrl)
$provider mixed имя класса или объект поставщика веб-сервиса
$wsdlUrl string URL для WSDL. Это необходимо для run().
$serviceUrl string URL веб-сервиса. Это необходимо для generateWsdl() и renderWsdl().
Исходный код: framework/web/services/CWebService.php#99 (показать)
public function __construct($provider,$wsdlUrl,$serviceUrl)
{
    
$this->provider=$provider;
    
$this->wsdlUrl=$wsdlUrl;
    
$this->serviceUrl=$serviceUrl;
}

Конструктор.

generateWsdl() метод

public string generateWsdl()
{return} string сгенерированный WSDL
Исходный код: framework/web/services/CWebService.php#142 (показать)
public function generateWsdl()
{
    
$providerClass=is_object($this->provider) ? get_class($this->provider) : Yii::import($this->provider,true);
    if(
$this->wsdlCacheDuration>0 && $this->cacheID!==false && ($cache=Yii::app()->getComponent($this->cacheID))!==null)
    {
        
$key='Yii.CWebService.'.$providerClass.$this->serviceUrl.$this->encoding;
        if((
$wsdl=$cache->get($key))!==false)
            return 
$wsdl;
    }
    
$generator=Yii::createComponent($this->generatorConfig);
    
$wsdl=$generator->generateWsdl($providerClass,$this->serviceUrl,$this->encoding);
    if(isset(
$key))
        
$cache->set($key,$wsdl,$this->wsdlCacheDuration);
    return 
$wsdl;
}

Генерирует WSDL, определённый поставщиком. Может быть использована кэшированная версия, если WSDL действителен в кэше.

См. также

  • wsdlCacheDuration

getMethodName() метод

public string getMethodName()
{return} string имя текущего запрашиваемого метода. Пустая строка, если метод не запрашивается.
Исходный код: framework/web/services/CWebService.php#236 (показать)
public function getMethodName()
{
    if(
$this->_method===null)
    {
        
// before PHP 5.6 php://input could be read only once
        // since PHP 5.6 $HTTP_RAW_POST_DATA is deprecated
        
if(version_compare(PHP_VERSION, '5.6.0', '<') && isset($HTTP_RAW_POST_DATA))
            
$request=$HTTP_RAW_POST_DATA;
        else
            
$request=file_get_contents('php://input');
        if(
preg_match('/<.*?:Body[^>]*>\s*<.*?:(\w+)/mi',$request,$matches))
            
$this->_method=$matches[1];
        else
            
$this->_method='';
    }
    return 
$this->_method;
}

getOptions() метод

protected array getOptions()
{return} array опции для создания экземпляра SoapServer
Исходный код: framework/web/services/CWebService.php#258 (показать)
protected function getOptions()
{
    
$options=array();
    if(
$this->soapVersion==='1.1')
        
$options['soap_version']=SOAP_1_1;
    elseif(
$this->soapVersion==='1.2')
        
$options['soap_version']=SOAP_1_2;
    if(
$this->actor!==null)
        
$options['actor']=$this->actor;
    
$options['encoding']=$this->encoding;
    foreach(
$this->classMap as $type=>$className)
    {
        
$className=Yii::import($className,true);
        if(
is_int($type))
            
$type=$className;
        
$options['classmap'][$type]=$className;
    }
    return 
$options;
}

См. также

  • http://www.php.net/manual/ru/soapserver.soapserver.php

handleError() метод

public void handleError(CErrorEvent $event)
$event CErrorEvent событие ошибки PHP
Исходный код: framework/web/services/CWebService.php#111 (показать)
public function handleError($event)
{
    
$event->handled=true;
    
$message=$event->message;
    if(
YII_DEBUG)
    {
        
$trace=debug_backtrace();
        if(isset(
$trace[2]) && isset($trace[2]['file']) && isset($trace[2]['line']))
            
$message.=' ('.$trace[2]['file'].':'.$trace[2]['line'].')';
    }
    throw new 
CException($message,self::SOAP_ERROR);
}

Обработчик ошибок PHP.

renderWsdl() метод

public void renderWsdl()
Исходный код: framework/web/services/CWebService.php#128 (показать)
public function renderWsdl()
{
    
$wsdl=$this->generateWsdl();
    
header('Content-Type: text/xml;charset='.$this->encoding);
    
header('Content-Length: '.(function_exists('mb_strlen') ? mb_strlen($wsdl,'8bit') : strlen($wsdl)));
    echo 
$wsdl;
}

Генерирует и отображает WSDL, определённый поставщиком.

См. также

  • generateWsdl

run() метод

public void run()
Исходный код: framework/web/services/CWebService.php#161 (показать)
public function run()
{
    
header('Content-Type: text/xml;charset='.$this->encoding);
    if(
YII_DEBUG)
        
ini_set("soap.wsdl_cache_enabled",0);
    
$server=new SoapServer($this->wsdlUrl,$this->getOptions());
    
Yii::app()->attachEventHandler('onError',array($this,'handleError'));
    try
    {
        if(
$this->persistence!==null)
            
$server->setPersistence($this->persistence);
        if(
is_string($this->provider))
            
$provider=Yii::createComponent($this->provider);
        else
            
$provider=$this->provider;

        if(
method_exists($server,'setObject'))
        {
            if (
is_array($this->generatorConfig) && isset($this->generatorConfig['bindingStyle'])
                && 
$this->generatorConfig['bindingStyle']==='document')
            {
                
$server->setObject(new CDocumentSoapObjectWrapper($provider));
            }
            else
            {
                
$server->setObject($provider);
            }
        }
        else
        {
            if (
is_array($this->generatorConfig) && isset($this->generatorConfig['bindingStyle'])
                && 
$this->generatorConfig['bindingStyle']==='document')
            {
                
$server->setClass('CDocumentSoapObjectWrapper',$provider);
            }
            else
            {
                
$server->setClass('CSoapObjectWrapper',$provider);
            }
        }

        if(
$provider instanceof IWebServiceProvider)
        {
            if(
$provider->beforeWebMethod($this))
            {
                
$server->handle();
                
$provider->afterWebMethod($this);
            }
        }
        else
            
$server->handle();
    }
    catch(
Exception $e)
    {
        if(
$e->getCode()!==self::SOAP_ERROR) // non-PHP error
        
{
            
// only log for non-PHP-error case because application's error handler already logs it
            // php <5.2 doesn't support string conversion auto-magically
            
Yii::log($e->__toString(),CLogger::LEVEL_ERROR,'application');
        }
        
$message=$e->getMessage();
        if(
YII_DEBUG)
            
$message.=' ('.$e->getFile().':'.$e->getLine().")\n".$e->getTraceAsString();

        
// We need to end application explicitly because of
        // http://bugs.php.net/bug.php?id=49513
        
Yii::app()->onEndRequest(new CEvent($this));
        
$server->fault(get_class($e),$message);
        exit(
1);
    }
}

Обрабатывает запрос веб-сервиса.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CWebService

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API