Php Zend Framework 2 SOAP故障异常

Php Zend Framework 2 SOAP故障异常,php,zend-framework,zend-framework2,Php,Zend Framework,Zend Framework2,我想知道我的SOAP代码中的原始异常详细信息是什么,我有一个SOAP服务器,它按如下方式处理请求: $options = array( 'soap_version' => SOAP_1_2, 'actor' => someUriAString, 'encoding' => 'UTF-8', 'uri' => someUriAString); $server = new Server(null, $options); $server->

我想知道我的SOAP代码中的原始异常详细信息是什么,我有一个SOAP服务器,它按如下方式处理请求:

$options = array(
    'soap_version' => SOAP_1_2,
    'actor' => someUriAString,
    'encoding' => 'UTF-8',
    'uri' => someUriAString);
$server = new Server(null, $options);
$server->setClass('SomeClass');
$server->setReturnResponse(true);
$serverResponse = $server->handle();
if ($serverResponse instanceof \SoapFault) {
    //log the $serverResponse exception details
}
然后我检查是否出现以下异常:

$options = array(
    'soap_version' => SOAP_1_2,
    'actor' => someUriAString,
    'encoding' => 'UTF-8',
    'uri' => someUriAString);
$server = new Server(null, $options);
$server->setClass('SomeClass');
$server->setReturnResponse(true);
$serverResponse = $server->handle();
if ($serverResponse instanceof \SoapFault) {
    //log the $serverResponse exception details
}
但是当我记录这个异常时,我得到了如下结果:

exception 'Exception' with message 'SoapFault exception: [Receiver] Unknown error 
if($message instanceof \Exception) {
    do {
       echo sprintf(
            "%s:%d %s (%d) [%s]\n", 
            $message->getFile(), 
            $message->getLine(), 
            $message->getMessage(), 
            $message->getCode(), 
            get_class($message)
       );
    }
    while($message = $message->getPrevious());
}
我需要知道的是原始异常详细信息。。。比如SQL异常,或者例如ORMException等等。i、 我需要准确的原始异常详细信息

我已尝试注册故障异常,如下例所示:

$server->registerFaultException('Doctrine\ORM\ORMException');

我不知道这是否正确,但问题是可能会发生其他类型的异常,我无法注册它们,因为我不知道我的代码中会发生什么异常

这取决于预期的设置方式,但您可以获得以前的异常消息:

$message->getPrevious();
您可以像这样对其进行迭代:

exception 'Exception' with message 'SoapFault exception: [Receiver] Unknown error 
if($message instanceof \Exception) {
    do {
       echo sprintf(
            "%s:%d %s (%d) [%s]\n", 
            $message->getFile(), 
            $message->getLine(), 
            $message->getMessage(), 
            $message->getCode(), 
            get_class($message)
       );
    }
    while($message = $message->getPrevious());
}

这不起作用。。。我认为这不应该起作用,因为引发SoapFault异常的方式是通过“返回”带有消息“Unknown error”的新SoapFault异常,因为原始异常没有使用
registerFaultException注册,我遇到了同样的问题,最后捕获了所有异常(是,
异常
类)并手动抛出一个
SoapFault
异常。SoapServer捕获并正确处理所有内容,而不使用
registerFaultException
方法。您可以使用
instanceof
getclass
将故障代码设置为您想要的任何值,然后在客户端使用此故障C处理异常颂歌。