未捕获的肥皂错误

时间:2012-04-18 10:33:34

标签: php zend-framework soap zend-soap

我在try ... catch块中进行肥皂调用,

        $request->l_Request->Year = $year;      
//      $request->l_Request->Period = $period;      
        try {
            /**
             * 
             * perform getMake request
             * @var stdClass
             */
            $response = $client->getSeries($request);    
            $series = $response->getSeriesResult->Lookup_Struc;                                                                                
            return $series;                      
        } catch (SoapFault $exception) {                        
            /**
             * log exception on soap request
             */
            $this->getLogger()->log($exception->getMessage(), Zend_Log::ERR);
            $this->getLogger()->log($exception->getTraceAsString(), Zend_Log::INFO);
            return false;           
        }  catch (Exception $exception) {                           
            /**
             * log exception on soap request
             */
            $this->getLogger()->log($exception->getMessage(), Zend_Log::ERR);
            $this->getLogger()->log($exception->getTraceAsString(), Zend_Log::INFO);
            return false;           
        }  

以下是我的输出/错误的样子

  

(!)致命错误:SOAP-ERROR:编码:对象没有'Period'   位于第1121行的C:\ wamp \ www \ FHH \ library \ Zend \ Soap \ Client.php中的属性

但是我无法使用try catch捕获soap-error,是否有特殊的方法来处理它。

1 个答案:

答案 0 :(得分:0)

我在我的应用程序中使用以下类将错误转换为异常:

class ErrorHandler
{
    public function __construct()
    {
        set_error_handler( array( __CLASS__, 'handleError' ));
    }

    static public function handleError( $errno, $errstr, $errfile,
                                        $errline, array $errcontext )
    {
        throw new ErrorException( $errstr, 0, $errno, $errfile, $errline );
    }
}

您只需要创建一个实例:

$errorHandler = new ErrorHandler();

如果您正在使用ZF1 MVC,则另一种方法是将构造函数重命名为__initErrorHandler(),并将这两种方法添加到引导类中。

我已经在使用Zend_Soap_Server的代码中成功使用了这种方法,所以希望它也适合你。