CWebServiceAction


system.web.services
继承 class CWebServiceAction » CAction » CComponent
实现 IAction
源自 1.0
版本 $Id: CWebServiceAction.php 3426 2011-10-25 00:01:09Z alexander.makarow $
源码
CWebServiceAction实现一个提供Web服务的动作。

CWebServiceAction服务有两个目的。一方面, 它显示WSDL中指定的Web服务API的内容。另一方面,它调用请求的Web service API。一个GET参数名为ws, 用来区分这两个方面:GET参数的存在 指示执行后者的行动。

默认情况下,CWebServiceAction将使用当前控制器 作为Web service提供者。参见CWsdlGenerator如何声明 可以远程调用的方法。

请注意,PHP SOAP扩展对于这一动作是必需的。

公共属性

属性 类型 描述 定义在
classMap array 在WSDL中声明复杂类型的PHP类的列表。 这应该是一个WSDL类型作为键和名称作为值的PHP类的数组。 一个PHP类,也可以指定一个路径别名。 CWebServiceAction
controller CController 拥有这个动作的控制器。 CAction
id string 动作的ID。 CAction
provider mixed Web service提供者的对象或者类名。 如果指定一个类名,它可以是一个路径别名。 默认为null,这意味着当前控制器是作为服务提供者。 如果提供者实现了接口IWebServiceProvider, 这将是能够拦截远程方法调用,并执行额外的任务 (如验证,写日志)。 CWebServiceAction
service CWebService 返回目前正在使用的Web服务实例。 CWebServiceAction
serviceOptions array CWebService对象初始属性值。 数组键是CWebService的属性名称, 数组中的值是相应的属性的初始值。 CWebServiceAction
serviceUrl string Web service的URL。默认为null,这意味着 这个动作的URL是用来提供Web服务。 在这种情况下,一个命名为serviceVar的GET参数 将被用来确定当前请求是否是WSDL或Web服务的。 CWebServiceAction
serviceVar string GET参数的区别从一个Web服务请求的 WSDL请求的名称。如果存在这个GET参数,请求被认为是作为一个Web服务请求, 否则,它是一个WSDL请求。默认为“ws”。 CWebServiceAction
wsdlUrl string WSDL的URL。默认为null,这意味着 这个动作的URL是用来服务的WSDL文档。 CWebServiceAction

公共方法

方法 描述 定义在
__call() 如果类中没有调的方法名,则调用这个方法。 CComponent
__construct() 构造方法。 CAction
__get() 返回一个属性值、一个事件处理程序列表或一个行为名称。 CComponent
__isset() 检查一个属性是否为null。 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
getController() 返回拥有这个动作的控制器。 CAction
getEventHandlers() 返回一个事件的附加处理程序列表。 CComponent
getId() 返回动作的ID。 CAction
getService() 返回目前正在使用的Web服务实例。 CWebServiceAction
hasEvent() 确定一个事件是否定义。 CComponent
hasEventHandler() 检查事件是否有附加的处理程序。 CComponent
hasProperty() 确定属性是否被定义。 CComponent
raiseEvent() 发起一个事件。 CComponent
run() 执行动作。 CWebServiceAction
runWithParams() 运行带有请求参数的对象。 CAction

受保护方法

方法 描述 定义在
createWebService() 创建CWebService实例。 CWebServiceAction
runWithParamsInternal() 执行一个带有命名参数的对象的方法。 CAction

属性详细

classMap 属性
public array $classMap;

在WSDL中声明复杂类型的PHP类的列表。 这应该是一个WSDL类型作为键和名称作为值的PHP类的数组。 一个PHP类,也可以指定一个路径别名。

provider 属性
public mixed $provider;

Web service提供者的对象或者类名。 如果指定一个类名,它可以是一个路径别名。 默认为null,这意味着当前控制器是作为服务提供者。 如果提供者实现了接口IWebServiceProvider, 这将是能够拦截远程方法调用,并执行额外的任务 (如验证,写日志)。

service 属性 只读

返回目前正在使用的Web服务实例。

serviceOptions 属性
public array $serviceOptions;

CWebService对象初始属性值。 数组键是CWebService的属性名称, 数组中的值是相应的属性的初始值。

serviceUrl 属性
public string $serviceUrl;

Web service的URL。默认为null,这意味着 这个动作的URL是用来提供Web服务。 在这种情况下,一个命名为serviceVar的GET参数 将被用来确定当前请求是否是WSDL或Web服务的。

serviceVar 属性
public string $serviceVar;

GET参数的区别从一个Web服务请求的 WSDL请求的名称。如果存在这个GET参数,请求被认为是作为一个Web服务请求, 否则,它是一个WSDL请求。默认为“ws”。

wsdlUrl 属性
public string $wsdlUrl;

WSDL的URL。默认为null,这意味着 这个动作的URL是用来服务的WSDL文档。

方法详细

createWebService() 方法
protected CWebService createWebService(mixed $provider, string $wsdlUrl, string $serviceUrl)
$provider mixed Web服务提供者的类名或对象
$wsdlUrl string WSDL的URL。
$serviceUrl string Web service的URL。
{return} CWebService Web service的实例
protected function createWebService($provider,$wsdlUrl,$serviceUrl)
{
    return new 
CWebService($provider,$wsdlUrl,$serviceUrl);
}

创建CWebService实例。 你可以重写此方法自定义创建的实例。

getService() 方法
public CWebService getService()
{return} CWebService Web service的实例
public function getService()
{
    return 
$this->_service;
}

返回目前正在使用的Web服务实例。

run() 方法
public void run()
public function run()
{
    
$hostInfo=Yii::app()->getRequest()->getHostInfo();
    
$controller=$this->getController();
    if((
$serviceUrl=$this->serviceUrl)===null)
        
$serviceUrl=$hostInfo.$controller->createUrl($this->getId(),array($this->serviceVar=>1));
    if((
$wsdlUrl=$this->wsdlUrl)===null)
        
$wsdlUrl=$hostInfo.$controller->createUrl($this->getId());
    if((
$provider=$this->provider)===null)
        
$provider=$controller;

    
$this->_service=$this->createWebService($provider,$wsdlUrl,$serviceUrl);

    if(
is_array($this->classMap))
        
$this->_service->classMap=$this->classMap;

    foreach(
$this->serviceOptions as $name=>$value)
        
$this->_service->$name=$value;

    if(isset(
$_GET[$this->serviceVar]))
        
$this->_service->run();
    else
        
$this->_service->renderWsdl();

    
Yii::app()->end();
}

执行动作。 如果GET参数serviceVar存在,这个动作处理远程方法调用。 如果没有,动作将调用服务的WSDL内容;