CWebService
| Пакет | system.web.services |
|---|---|
| Наследование | class CWebService » CComponent |
| С версии | 1.0 |
| Исходный код | framework/web/services/CWebService.php |
Требуется расширение 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 класс также может быть указан как псевдоним пути.
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
persistence свойство
public integer $persistence;
режим сохранения SOAP-сервера.
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(). |
public function __construct($provider,$wsdlUrl,$serviceUrl)
{
$this->provider=$provider;
$this->wsdlUrl=$wsdlUrl;
$this->serviceUrl=$serviceUrl;
}
Конструктор.
generateWsdl() метод
public string generateWsdl() | ||
| {return} | string | сгенерированный WSDL |
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 действителен в кэше.
См. также
getMethodName() метод
public string getMethodName() | ||
| {return} | string | имя текущего запрашиваемого метода. Пустая строка, если метод не запрашивается. |
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 |
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;
}
handleError() метод
public void handleError(CErrorEvent $event) | ||
| $event | CErrorEvent | событие ошибки PHP |
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() |
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, определённый поставщиком.
См. также
run() метод
public void run() |
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