Erfahren Sie mehr über die unvorhersehbare interne Lösung für die Ausgabe abnormaler API-Daten von thinkphp5

Ursprüngliche Fehlerausnahme

Erstellen Sie einen Fehler in der Speichermethode wie folgt, keine Datenvariable, sondern Echo,


    //post 需要定义$id
    public function save()
    {
    
    

        echo $data;

        $post_data = input('post.');
        $data = array(
            'post_data' => $post_data
        );
        return show(0, '保存成功!', $data);
    }

Fordern Sie einen Fehler an und lösen Sie eine Ausnahme aus
Fügen Sie hier eine Bildbeschreibung ein

Kommt mit einer Fehlerausnahme, bei der es sich um die Rendermethode der Handle.php-Klasse in \ thinkphp \ library \ think \ exception im Stammverzeichnis des Aufrufs handelt
Fügen Sie hier eine Bildbeschreibung ein

    public function render(Exception $e)
    {
    
    
        if ($e instanceof HttpException) {
    
    
            return $this->renderHttpException($e);
        } else {
    
    
            return $this->convertExceptionToResponse($e);
        }
    }

Wir müssen eine neue Klasse erstellen, die Rendermethode neu rendern und die Art und Weise ändern, wie Ausnahmen ausgelöst werden

Kapselung der Fehlerausnahmeklasse

1. Erstellen Sie die Datei ApiHandleException.php

Erstellen Sie die Datei ApiHandleException.php im Verzeichnis thinkphpwu \ application \ common \ lib \ exception. Der
Fügen Sie hier eine Bildbeschreibung ein
spezifische Code lautet wie folgt:

<?php

namespace app\common\lib\exception;


//引用异常类
use think\exception\Handle;

//继承异常类
class ApiHandleException extends Handle
{
    
    

    //自定义http状态码
    public static $httpCode = 500;

    //覆盖原有render方法
    public function render(\Exception $e)
    {
    
    
        return show(0, $e->getMessage(), [], self::$httpCode);
    }

}

2. Ändern Sie die Konfiguration config.php

Suchen Sie exception_handle in config.php im Anwendungsverzeichnis

Fügen Sie hier eine Bildbeschreibung ein
ändern:

    // 异常处理handle类 留空使用 \think\exception\Handle
    'exception_handle' => 'app\common\lib\exception\ApiHandleException',

Briefträgertest

Fügen Sie hier eine Bildbeschreibung ein

Das Paketgeschäft löst eine Ausnahmeklasse aus

Wenn wir Geschäfte abwickeln, werden wir auf Ausnahmebehandlungen stoßen, die nicht den Anforderungen des Hintergrundurteils entsprechen, und diese auslösen. Wenn wir nur die Ausnahmeklasse des Frameworks selbst verwenden, werden die Geschäftsanforderungen nicht erfüllt.

Zum Beispiel ändern wir eine Speichermethode

    //post 需要定义$id
    public function save()
    {
    
    
        $post_data = input('post.');
        if ($post_data['url'] != 'qipa250.com') {
    
     
        //抛出异常      
            exception('域名不正确');
        }
        $data = array(
            'post_data' => $post_data
        );
        return show(0, '保存成功!', $data);
    }

Fügen Sie hier eine Bildbeschreibung ein
Wenn wir anfordern, werden wir feststellen, dass der http-Statuscode 500 ist, was nicht zumutbar ist. Wir müssen die Ausnahmeklasse kapseln, um den httpcode-Code zu definieren

Erstellen Sie die ApiException.php-Klasse unter application \ common \ lib \ exception im Stammverzeichnis. Der
Fügen Sie hier eine Bildbeschreibung ein
spezifische Code lautet wie folgt:

<?php

namespace app\common\lib\exception;

//引用异常类
use think\Exception;


//继承异常类
class ApiException extends Exception
{
    
    
    //自定义http状态码
    public $message = '';
    public $httpCode = 400;
    public $code = 0;

    /*
     * 渲染抛出异常的状态码和信息
     */
    public function __construct($message = "", $httpCode = 0, $code = 0)
    {
    
    
        $this->message = $message;
        $this->httpCode = $httpCode;
        $this->code = $code;
    }
}

Referenz in der Speichermethode des Controllers

//在class的顶部引用
use app\common\lib\exception\ApiException;


    //post 需要定义$id
    public function save()
    {
    
    
        $post_data = input('post.');
        if ($post_data['url'] != 'qipa250.com') {
    
    
            //抛出异常
            throw new ApiException('域名不正确', 444, 1);
        }
        $data = array(
            'post_data' => $post_data
        );
        return show(0, '保存成功!', $data);
    }

Ändern Sie die Rendermethode in der ApiHandleException-Klasse

    //覆盖原有render方法
    public function render(\Exception $e)
    {
    
    
        //如果debug模式开启,则直接返回报错信息
        if (config('app_debug') == true) {
    
    
            return parent::render($e);
        }
        //否则debug模式关闭,返回格式化的报错信息
        if ($e instanceof ApiException) {
    
    
            self::$httpCode = $e->httpCode;
        }
        return show(0, $e->getMessage(), [], self::$httpCode);
    }

Bei erneuter Anforderung können Sie sehen, dass der Wert von httpcode geändert wurde

Fügen Sie hier eine Bildbeschreibung ein

Debug-Modus ein und aus

Suchen Sie in der Konfigurationsdatei config.php des Anwendungsverzeichnisses app_debug

    // 应用调试模式
    'app_debug' => false, //false为关闭,true为开启

Deaktivieren Sie den Debugging-Modus und geben Sie den folgenden Inhalt zurück:

Fügen Sie hier eine Bildbeschreibung ein
Wenn Sie den Debugging-Modus aktivieren, wird der folgende Inhalt zurückgegeben: Sie
können die Fehlermeldung intuitiver sehen. In der Produktionsumgebung müssen Sie den Debugging-Modus deaktivieren
Fügen Sie hier eine Bildbeschreibung ein

Ich denke du magst

Origin blog.csdn.net/guo_qiangqiang/article/details/112108548
Empfohlen
Rangfolge