Php 使用NuSOAP返回两个类型

Php 使用NuSOAP返回两个类型,php,nusoap,Php,Nusoap,我有一个使用NuSOAP的工作Web服务。现在,我必须在返回请求的数据之前进行验证。如果一切正常,我将正常返回它,否则我将返回一条字符串消息,解释我为什么不提供所需的信息。问题是我无法添加两种不同类型的返回到NuSOAP的RegisterFunction。如果将ComplexType添加为return,则无法返回字符串。您首先需要定义一个新类型来描述字符串数组,如下所示: $server->wsdl->addComplexType( 'ArrayOfString', 'com

我有一个使用NuSOAP的工作Web服务。现在,我必须在返回请求的数据之前进行验证。如果一切正常,我将正常返回它,否则我将返回一条字符串消息,解释我为什么不提供所需的信息。问题是我无法添加两种不同类型的返回到NuSOAP的RegisterFunction。如果将ComplexType添加为return,则无法返回字符串。

您首先需要定义一个新类型来描述字符串数组,如下所示:

$server->wsdl->addComplexType(
  'ArrayOfString',
  'complexType',
  'array',
  'sequence',
  '',
  array(
    'itemName' => array(
      'name' => 'itemName', 
      'type' => 'xsd:string',
      'minOccurs' => '0', 
      'maxOccurs' => 'unbounded'
    )
  )
);

然后可以使用tns:ArrayOfString作为返回类型。

该函数不能有两个返回值。您应该将错误消息字符串添加到复杂类型中。如果你不想触摸你的复杂类型,那么你应该创建另一个 复杂类型包含您的数据类型和字符串

示例-您现在拥有的复杂类型:

$server->wsdl->addComplexType('myData','complexType','struct','all','',
    array(  'important'  => array('name' => 'important','type' => 'xsd:string'),
            'stuff'      => array('name' => 'stuff','type' => 'xsd:string')
    )
);
超复杂类型:

$server->wsdl->addComplexType('package','complexType','struct','all','',
    array(  'data'      => array('name' => 'data','type' => 'tns:myData'),
            'errormsg'  => array('name' => 'errormsg','type' => 'xsd:string')
    )
);
职能的登记:

$server->register(
                'getData',     
                array('validation'=>'xsd:string'), 
                array('return'=>'tns:package'),
                $namespace,
                false,
                'rpc',
                'encoded',
                'description'
);
function GetData($validation)
{
    if($validation == "thegoodguy") {
        $result['data'] = array(
            "important"    => "a top secret information",
            "stuff"        => "another one"
        );
        $result['errormsg'] = null;
    } else {
        $result['data'] = null;
        $result['errormsg'] = "permission denied!";
    }
    return $result;
}
职能:

$server->register(
                'getData',     
                array('validation'=>'xsd:string'), 
                array('return'=>'tns:package'),
                $namespace,
                false,
                'rpc',
                'encoded',
                'description'
);
function GetData($validation)
{
    if($validation == "thegoodguy") {
        $result['data'] = array(
            "important"    => "a top secret information",
            "stuff"        => "another one"
        );
        $result['errormsg'] = null;
    } else {
        $result['data'] = null;
        $result['errormsg'] = "permission denied!";
    }
    return $result;
}
这样,客户可以尝试分析接收到的数据,如果该数据为空,则他
显示错误消息。

您似乎忘记问问题了。你试过什么?什么不起作用?你做了什么研究来解决这个问题?这不是我想要回报的。我想返回一个我已经拥有它的ComplexType的odel数组,但是如果我无论如何都不能返回预期的ComplexType,我还想返回一个字符串。就像我想要在一个函数中有两种类型的返回。1表示成功(ComplexType),另一个表示失败(message)