georgo/wsdl-creator
使用PHPdoc(注解、反射)的PHP WSDL创建器。
Requires
- letsdrink/ouzo-goodies: 1.5.0
Requires (Dev)
- phpunit/phpunit: 4.7.5
- satooshi/php-coveralls: dev-master
- symfony/console: v2.7.1
README
简介
WSDL创建器允许基于PHP类(使用注解和反射机制)生成WSDL文档。此生成器还提供了生成概述方法和参数以及WSDL中使用的SOAP示例的可能性。
支持:>= PHP5.5。
安装
要在项目中安装wsdl-creator,请使用composer。
###创建新项目
composer.phar create-project georgo/wsdl-creator myproject
###或添加到composer.json文件
require: {
"georgo/wsdl-creator": "1.*"
}
配置
要开始使用创建器,您必须创建一个新的WSDLCreator
对象,并为他定义以下内容:
- 要生成
WSDL
的类 SOAP
服务器位置- 文档命名空间。
$wsdl = new WSDL\WSDLCreator('ClassName', 'https:///wsdl-creator/ClassName.php'); $wsdl->setNamespace("http://foo.bar/");
SOAP
服务器必须在WSDLCreator
中指定的位置创建。
$server = new SoapServer(null, array( 'uri' => 'https:///wsdl-creator/ClassName.php' )); $server->setClass('ClassName'); $server->handle();
要渲染XML
,请使用方法renderWSDL
。要正确加载生成器类,请使用位于vendor/autoload.php
的composer加载器。
完整配置列表
require_once 'vendor/autoload.php'; use WSDL\WSDLCreator; if (isset($_GET['wsdl'])) { $wsdl = new WSDL\WSDLCreator('ClassName', 'https:///wsdl-creator/ClassName.php'); $wsdl->setNamespace("http://foo.bar/"); $wsdl->renderWSDL(); exit; } $server = new SoapServer(null, array( 'uri' => 'https:///wsdl-creator/ClassName.php' )); $server->setClass('ClassName'); $server->handle();
现在,如果我们尝试调用地址https:///wsdl-creator/ClassName.php?wsdl
,我们将收到WSDL
文档。
定义Web服务方法
要定义Web服务方法,您必须使用@WebMethod
注解。
简单类型
简单类型在此处描述这里。
###用法
/**
* @param string $name
*/
因此,您可以在变量(例如$name
)名称之后输入@param
并指定简单类型之一(例如string
)。
您还可以使用简单类型的数组。
###用法
/**
* @param string[] $names
*/
现在,在输入参数中,您必须定义您传递的数组类型(例如string[]
)。
###示例
###注解
- @desc 方法描述
- @param 类型 $varialbe_name
- @return 类型 $return
包装类型
包装类型是用户定义的类,您可以使用它生成WSDL
复杂类型。
###用法
/**
* @param wrapper $user @className=User
*/
您必须定义一个具有公共字段和包含字段类型示例的文档注释的类User
。
class User { /** * @type string */ public $name; /** * @type int */ public $age; }
此机制使用反射,即User
类必须对生成的类可见 - 可使用命名空间(例如\Namespace\To\User
)。
您可以定义包装器的数组。
###用法
/**
* @return wrapper[] $users @className=User
*/
此注解将生成用户数组。
###示例
###注解
- @desc 方法描述
- @param wrapper[] @className=ClassName
- @return wrapper @className=\Namespace\To\ClassName
对象类型
您可以在运行时动态创建对象。使用object
参数类型。
###用法
/**
* @param object $info @string=$name @int=$age
*/
此注解创建具有name
和age
元素的复杂类型。
您还可以将类包装在对象中。
###用法
/**
* @return object $userNameWithId @(wrapper $user @className=User) @int=$id
*/
上面的示例将返回包含指向User
复杂类型和int
类型的指针的UserNameWithId
对象。
另一个选项是创建对象的数组。
###用法
/**
* @param object[] $payments @float=$payment @string=$user
*/
此注解创建具有每个元素上的payment
和user
的数组。
###示例
###附加信息
在object
中,您可以使用包装器的数组以及简单类型的数组。
###注解
- @desc 方法描述
- @param object $object @type1=$name1 @type2=$name2
- @param object $object @(wrapper $nameWrapper @className=User) @type1=$name1
- @param object[] $object @type1[]=$name1
- @return
服务概述
您可以通过renderWSDLService
方法生成服务概述。这显示了服务中使用的所有方法和参数的详细信息,包括示例SOAP
请求。
###示例
样式
默认情况下,WSDLCreator
将使用rpc/literal绑定样式生成WSDL。
要指定rpc/encoded或包装的document/literal绑定样式,请设置WSDLCreator
对象的绑定样式。
$wsdl = new WSDL\WSDLCreator('ClassName', 'https:///wsdl-creator/ClassName.php'); @wsdl->setBindingStyle(new WSDL\XML\Styles\RpcEncoded()); $wsdl->setNamespace("http://foo.bar/");
在指定包装的document/literal绑定样式时,您可以使用WSDL\DocumentLiteralWrapper
来自动将返回值包装在适当的包装对象中。
require_once 'vendor/autoload.php'; use WSDL\DocumentLiteralWrapper; use WSDL\WSDLCreator; use WSDL\XML\Styles\DocumentLiteralWrapped; if (isset($_GET['wsdl'])) { $wsdl = new WSDLCreator('ClassName', 'https:///wsdl-creator/ClassName.php'); @wsdl->setBindingStyle(new DocumentLiteralWrapped()); $wsdl->setNamespace("http://foo.bar/"); $wsdl->renderWSDL(); exit; } ini_set('soap.wsdl_cache_enabled', '0'); $server = new SoapServer('https:///wsdl-creator/ClassName.php?wsdl', array( 'style' => SOAP_DOCUMENT, 'use' => SOAP_LITERAL, )); $server->setObject(new DocumentLiteralWrapped(new ClassName())); $server->handle();