如何才能优雅的将 lv(Laravel) 返回的错误进行规避?

一、lv(laravel)报错全部返回值是200,因为我们是api接口 需要统计接口成功率,报错了宁可推送内部短信或者记录日志,返回也要是200 不能报错
二、当出现异常时候 怎们才能完全自定义错误类?

看了一个托管错误的文章,但是因为里面没有具体的错误行号、代码导致错误的提示根本不知道哪里报的。

原文链接:
博客:制作一个 BearyChat 的 Laravel 项目错误日志通知机器人

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

lv...有點難懂的縮寫
我看原文的 Demo 圖片中有行號
如何自定義錯誤類及規避 500 可以參考如下
首先產生 Exception

$ php artisan make:exception Exception1

在 Controller 中使用

// Controller
use App\Exceptions\Exception1;
...
public function get ()
{
    try{
        ...
    } catch(Exception1 $exception){
        // report 方法會將錯誤丟到 Laravel Exception 統一處理,但不會終止程式執行
        // 因此可以在 Laravel Exception 中處理推送短信及寫入錯誤日誌等
        report($exception);

        // 報完錯誤仍然返回 200
        return response('OK');
    } catch(Exception2 $exception){
        report($exception);

        return response('OK');
    }
}
// app/Exceptions/Handler.php
use App\Exceptions\Exception1;
...
public function render($request, Exception $exception)
{
    ...
    if ($exception instanceof Exception1) {
        // 推送短信
        // 寫入日誌
    }
    ...
}
6年前 评论
讨论数量: 6

lv是什么?laravel吗?如果你不想要laravel返回错误的状态,那你可以在app/Exceptions/Handler.php里面的render方法里面自定义返回错误信息,比如所有错误都渲染成200返回,要记录日志的话,就在report方法里记录错误,更多用法参见错误与日志文档

https://learnku.com/docs/laravel/5.6/error...

6年前 评论

lv...有點難懂的縮寫
我看原文的 Demo 圖片中有行號
如何自定義錯誤類及規避 500 可以參考如下
首先產生 Exception

$ php artisan make:exception Exception1

在 Controller 中使用

// Controller
use App\Exceptions\Exception1;
...
public function get ()
{
    try{
        ...
    } catch(Exception1 $exception){
        // report 方法會將錯誤丟到 Laravel Exception 統一處理,但不會終止程式執行
        // 因此可以在 Laravel Exception 中處理推送短信及寫入錯誤日誌等
        report($exception);

        // 報完錯誤仍然返回 200
        return response('OK');
    } catch(Exception2 $exception){
        report($exception);

        return response('OK');
    }
}
// app/Exceptions/Handler.php
use App\Exceptions\Exception1;
...
public function render($request, Exception $exception)
{
    ...
    if ($exception instanceof Exception1) {
        // 推送短信
        // 寫入日誌
    }
    ...
}
6年前 评论

@FMW 我才覺得 lv 看不懂,你就比我早一步講了?

6年前 评论

@leochien
非常感谢您百忙之中的回答,我明白你的意思了,你的想法是接口出现问题直接抛给了自定义的类,自定义的类在处理,我有好多接口,需要都写一次,所以怎么才能写一次 就能优雅的托管大部分的错误呢?需求是 框架所有抛异常全部都推送短信啦,但是返回状态码是200.因为刚学这个框架 很多东西不明白 知道特别麻烦您 特别歉意。

6年前 评论

@xflyhack 社區都是互相幫忙?
我寫的那個範例是參考你有自訂錯誤類的需求,才需要在每個 Controller 都做 try/catch
若所有錯誤都要用統一方法處理,因為 Laravel 所有錯誤都會流向 app/Exceptions/Handler.php,所以在那裏統一處理即可

// app/Exceptions/Handler.php
use App\Exceptions\Exception1;
...
public function render($request, Exception $exception)
{
    ...
    // 自訂方法一樣留著
    if ($exception instanceof Exception1) {
        // 推送短信
        // 寫入日誌
    }
    // 過濾後沒有符合自訂錯誤就會到這
    // 推送短信
    // 寫入日誌
    // 回傳 200
    ...
}
6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!