jelix/soap-server-module

模块,用于在Jelix应用中实现SOAP服务器

v1.7.10 2022-06-29 16:59 UTC

This package is auto-updated.

Last update: 2024-09-11 21:51:05 UTC


README

这是一个Jelix模块,提供了Soap Response对象和SOAP协调器,允许在基于Jelix框架构建的应用程序中实现SOAP服务。它还可以自动生成WSDL内容。

它使用PHP SOAP API,因此您需要配置您的Web服务器以包含此扩展。

此模块适用于Jelix 1.7.x及更高版本。查看jelix/jelix存储库以查看Jelix 1.7之前的版本的历史记录。

设置模块

像其他Jelix模块一样手动安装,或者如果您使用Composer安装了Jelix 1.7+,则可以使用Composer。

在您的项目中

composer require "jelix/soap-server-module"

启动您的应用程序的配置器以启用该模块

php dev.php module:configure jsoap

创建了一个新的入口点,并将其声明在您的app/system/framework.ini.phpapp/system/urls.xml中。

然后启动安装程序以激活该模块

php install/installer.php

使用模块

控制器

由于这是一个特定类型的请求,控制器文件名必须以".soap.php"结尾。例如,对于“默认”控制器:default.soap.php。(它可以与“默认”经典控制器如“default.classic.php”共存)。

SOAP控制器的方法

控制器的内容类似于经典控制器,但有少量差异。您将检索一个jResponseSoap对象作为响应,其别名为“soap”。

class defaultCtrl extends jController {

    /** 
     * Test with a simple parameter
     * @externalparam string $name
     * @return string
     */
    function hello() {
        $resp = $this->getResponse('soap');
        $resp->data = "Hello ".$this->param('name');
        return $resp;
    }
}

控制器的每个动作实际上是一个“soap方法”。

声明参数类型和返回值类型

“soap方法”有参数,应该接收一个值。您应该指定它们的类型,以便Jelix可以正确生成soap和xsl消息。

为此,只需添加“文档注释”(如phpdoc),并使用一些@externalparam标签和一个@return标签来指示参数类型和返回值类型(我们使用@externalparam而不是@param,因为这些不是PHP方法的参数)。示例

    @externalparam string $myparameter

这里指示soap参数$myparameter是一个字符串。其他可能的类型是“integer”,“int”,“boolean”,“float”。

如果您想指示一个数组,请添加类型名称后跟[]

    @externalparam string[] $array_of_string

如果是关联数组,请使用[=>]

    @externalparam string[=>] $array_of_string

如果您想使用复杂类型,如用于参数或返回值的自己的对象。这些对象的类应包含在控制器的文件中,或应能够自动加载。

这里是一个用于参数的对象示例MyTestStruct

/**
 * Struct used for tests
 */
class MyTestStruct {
    /**
     * @var string
     */
    public $name = 'Dupont';

    /**
     * @var string
     */
    public $firstName = 'Bertrand';

    /**
     * @var string
     */
    public $city = 'Paris';
}

请注意使用必要的"@var"关键字来指示每个属性的类型。

然后,在您的控制器中,不要忘记为参数或返回值指示MyTestStruct

    /** 
     * for this method, we receive a MyTestStruct and return a MyTestStruct object
     * @externalparam MyTestStruct $input
     * @return MyTestStruct
     */
    function receiveObject() {
        $resp = $this->getResponse('soap');
        $input = $this->param('input');
        $input->name = 'Name updated';
        $resp->data = $input;
        return $resp;
    }

当然,MyTestStruct可以有一些具有复杂类型的属性

/**
 * An other struct used for test, this one have an other object as member propertie
 */
class MyTestStructBis {

    /**
     * @var MyTestStruct
     */
    public $test;

    /**
     * @var string
     */
    public $msg = 'hello';

    function __construct(){
        $this->test = new MyTestStruct();
    }
}

检索服务的URL

您可以通过以下方式检索soap操作的URL

  $url = jUrl::get("mymodule~myaction@soap");

使用WSDL服务

当您使用SOAP协议时,您应该提供一些WSDL文件,这些文件允许SOAP客户端了解可用的SOAP方法。

jsoap模块提供了生成WSDL的功能。它包含一个名为"WSDL"的控制器,其中包含一个wsdl()方法。因此,只需将此操作的URL指示给您的SOAP客户端即可。

   http://mysite.com/index.php/jsoap/WSDL/wsdl?service=aModule~aController

请注意,您应该提供一个"service"参数,以指示包含Web服务的控制器。您可以有多个SOAP控制器,但无法自动为应用程序中实现的所有SOAP Web服务返回WSDL文件。

您可以通过调用WSDL控制器的index()方法来显示SOAP服务列表的HTML版本。

  http://mysite.com/index.php/jsoap/WSDL?service=aModule~aController

单元测试

单元测试位于Testapp中,在jelix/jelix仓库中。