这是我处理任何错误的代码:
应用\异常\处理程序::类
public function render($request, Exception $e)
{
$fe = SymfonyComponentDebugExceptionFlattenException::create($e);
$statusCode = $fe->getStatusCode();
$code = $fe->getCode();
$message = $fe->getMessage();
$errorObj = new AppLOHDomainEntitiesError($code, $message);
return response()->json(['data' => null, 'error' => $errorObj], $statusCode);
}
当我将一个虚假的 WSDL URL 解析到 SoapClient 时,它会抛出两个异常
{"data":null,"error":{"code":"0","message":"SOAP-ERROR: Parsing WSDL: Couldn't load from 'asdsd' : failed to load external entity "asdsd"n"}}
{"data":null,"error":{"code":"1","message":"SOAP-ERROR: Parsing WSDL: Couldn't load from 'asdsd' : failed to load external entity "asdsd"n"}}
所以 json 响应变得无效
在供应商中注释这些代码行时,它会抛出一个异常:
Laravel\Lumen\Concern\RegistersExceptionHandlers trait
protected function registerErrorHandling()
{
error_reporting(-1);
set_error_handler(function ($level, $message, $file = '', $line = 0) {
if (error_reporting() & $level) {
throw new ErrorException($message, 0, $level, $file, $line);
}
});
set_exception_handler(function ($e) {
$this->handleUncaughtException($e);
});
// register_shutdown_function(function () {
// $this->handleShutdown();
// });
}
那么,问题是什么?以及如何在不编辑供应商的情况下解决它?
解决方案是清除最后一个错误,因为它触发了两次。
- 错误异常。
- 二是关机功能。
因此,解决方案是:
应用\异常\处理程序::类
public function render($request, Exception $e)
{
$fe = SymfonyComponentDebugExceptionFlattenException::create($e);
$statusCode = $fe->getStatusCode();
$code = $fe->getCode();
$message = $fe->getMessage();
$errorObj = new AppDomainEntitiesResponseEntitesError($code, $message);
/**
* This line of code resolves the issue
*
* To reproduce the issue :
* 1) Comment this following line of code
* 2) Provide a fake WSDL URL to the SoapClient
*
* Recommendation: Remove this line if you aren't using the SoapClient
*/
error_clear_last();
return new IlluminateHttpJsonResponse(['data' => null, 'error' => $errorObj], $statusCode);
}
这不是最好的解决方案(但这是我在我的情况下尝试过的最佳解决方案)。 如果您有更好的测试解决方案,请分享。
链接:
- 致命异常处理两次
- 代码更改