问题描述
如果我在API控制器/路由中抛出异常,则它总是返回一个包含堆栈跟踪的对象。我已经设置了APP_DEBUG = FALSE和APP_ENV = production,但是我总是得到如下的堆栈跟踪...
throw new HttpException(410,'Http Exception is gettting a stack trace.');
abort(404,'Please tell me debug is not found!');
throw new UpdateResourceFailedException('Even my custom exception! How?',422);
它返回这样的对象:
{
"message": "Message","status_code": 410,"debug": {
"line": 412,"file": "/var/www/example.com/app/Http/Controllers/OrderController.PHP","class": "Symfony\\Component\\HttpKernel\\Exception\\HttpException","trace": [
"#0 [internal function]: App\\Http\\Controllers\\OrderController->show()","#1 /var/www/example.com/vendor/laravel/framework/src/Illuminate/Routing/Controller.PHP(55): call_user_func_array()","#2 /var/www/example.com/vendor/laravel/framework/src/Illuminate/Routing/Controllerdispatcher.PHP(44): Illuminate\\Routing\\Controller->callAction()","#3 /var/www/example.com/vendor/laravel/framework/src/Illuminate/Routing/Route.PHP(203): Illuminate\\Routing\\Controllerdispatcher->dispatch()","#4 /var/www/example.com/vendor/laravel/framework/src/Illuminate/Routing/Route.PHP(160): Illuminate\\Routing\\Route->runcontroller()","#5 /var/www/example.com/vendor/laravel/framework/src/Illuminate/Routing/Router.PHP(572): Illuminate\\Routing\\Route->run()","#6 /var/www/example.com/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.PHP(30): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()","#7 /var/www/example.com/vendor/dingo/api/src/Http/Middleware/Auth.PHP(55): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}()","#8 /var/www/example.com/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.PHP(148): Dingo\\Api\\Http\\Middleware\\Auth->handle()","#9 /var/www/example.com/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.PHP(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()"...
我无法关闭它或弄清楚为什么添加它。任何帮助,将不胜感激。是的,我已经转储了.env变量和配置文件,以查看系统认为的值是什么,并且始终是:
"debug":false
关于为什么返回调试的任何想法?
解决方法
您始终可以捕获这些错误并返回异常消息作为响应。
try{
//throw exception here
throw new UpdateResourceFailedException('Even my custom exception! How?',422);
}catch(UpdateResourceFailedException $ex){
// when you want http response
// return response(['custom_exception'=>$ex->getMessage()],4xx);
// when you want resposne as json
return response()->json(['custom_exception'=>$ex->getMessage()],4xx);
}
您可以返回这些异常以及状态码。
https://www.php.net/manual/en/throwable.getmessage.php
,您可以创建用于处理所有异常的特征,将您的exception / handler.php更新为调用特征,而不是显示跟踪。