georgo/wsdl-creator

使用PHPdoc(注解、反射)的PHP WSDL创建器。

维护者

详细信息

github.com/georgo/wsdl-creator

源代码

安装: 13,822

依赖项: 0

建议者: 0

安全: 0

星级: 4

关注者: 4

分支: 52

1.4.1.4 2017-03-07 07:56 UTC

This package is auto-updated.

Last update: 2024-09-29 04:14:21 UTC


README

Build Status Scrutinizer Quality Score Coverage Status Dependency Status

简介

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[])。

###示例

SimpleTypeExample

###注解

  • @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
*/

此注解将生成用户数组。

###示例

WrapperTypeExample

###注解

  • @desc 方法描述
  • @param wrapper[] @className=ClassName
  • @return wrapper @className=\Namespace\To\ClassName

对象类型

您可以在运行时动态创建对象。使用object参数类型。

###用法

/**
* @param object $info @string=$name @int=$age
*/

此注解创建具有nameage元素的复杂类型。

您还可以将类包装在对象中。

###用法

/**
* @return object $userNameWithId @(wrapper $user @className=User) @int=$id
*/

上面的示例将返回包含指向User复杂类型和int类型的指针的UserNameWithId对象。

另一个选项是创建对象的数组。

###用法

/**
* @param object[] $payments @float=$payment @string=$user
*/

此注解创建具有每个元素上的paymentuser的数组。

###示例

ObjectTypeExample

###附加信息

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 请求

###示例

Wrapper image

样式

默认情况下,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();