Laravel Abort和Exceptions将调试/堆栈跟踪添加到API响应APP_DEBUG = FALSE

问题描述

如果我在API控制器/路由中抛出异常,则它总是返回一个包含堆栈跟踪的对象。我已经设置了APP_DEBUG = FALSE和APP_ENV = production,但是我总是得到如下的堆栈跟踪...

假设我将其中任何一个扔到controllers方法中:

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更新为调用特征,而不是显示跟踪。