Heim PHP-Framework Denken Sie an PHP In diesem Artikel wird erläutert, wie Sie globale Ausnahmen in thinkphp5 anpassen

In diesem Artikel wird erläutert, wie Sie globale Ausnahmen in thinkphp5 anpassen

Nov 02, 2021 pm 04:07 PM
thinkphp5

Die folgende Tutorial-Kolumne zum Thinkphp-Framework erklärt Ihnen, wie Sie globale Ausnahmen in thinkphp5 anpassen. Ich hoffe, dass es für Freunde in Not hilfreich ist! Um beim Schreiben der API unangemessenen JSON zurückzugeben, verwenden Sie direkt die mit TP5 gelieferte Fehlerseite. Dies hat offensichtlich keine Auswirkungen auf den Client, daher müssen Sie die globale Ausnahme selbst anpassen. 1. Erstellen Sie eine globale Ausnahmeklasse (zur Übertragung von Fehlermeldungen, Statuscodes usw.)

use think\Exception;
class BaseException extends Exception {
    /** HTTP 状态码
     * @var string
     */
    public $code;
    
    /** 自定义错误码
     * @var string
     */
    public $errorCode;
    
    /** 错误信息
     * @var string
     */
    public $msg;
    
    public function __construct($params=[])
    {
        if (! $params) {
            return ;
        }
        
        // 如果传了 code
        if ($array_key_exists('code', $code) {
            $this->code = $code;
        }
        
        // 如果传了 errorCode
        if (array_key_exists('errorCode', $params)) {
            $this->errorCode = $params['errorCode'];
        }
        // 如果传了 msg
        if (array_key_exists('msg', $params)) {
            $this->msg = $params['msg'];
        }
    }
}
Nach dem Login kopieren

Auf diese Weise können Sie Statuscodes, Fehlermeldungen und benutzerdefinierte Fehlercodes angeben, die nicht übergeben werden können.

2. Erstellen Sie eine Fehlerbehandlungsklasse

Die Fehlerbehandlungsklasse erbt von der Fehlerbehandlungsklasse, die mit TP5 geliefert wird, und Sie können Fehler anpassen.

use Exception;
use think\exception\Handle;
use think\Request;
class ExceptionHandle extends Handle 
{
    /** 状态码
     * @var
     */
    private $code;
    /** 自定义错误码
     * @var
     */
    private $errorCode;
    /** 错误信息
     * @var
     */
    private $msg;
    
    /** 重写 Handle 方法里的Render
     * @param Exception $e
     * @return \think\response\Json
     */
            // 注意这里是基类 Exception
    public function render(Exception $e) 
    {
        if ($e instanceof BaseException) {
            //如果是自定义异常,则控制http状态码,不需要记录日志
            //因为这些通常是因为客户端传递参数错误或者是用户请求造成的异常
            //不应当记录日志
            $this->msg = $e->msg;
            $this->code = $e->code;
            $this->errorCode = $e->errorCode;
        } else {
            // 如果是服务器未处理的异常,将http状态码设置为500,并记录日志
            if (config('app_debug')) {
                // 调试状态下需要显示TP默认的异常页面,因为TP的默认页面
                // 很容易看出问题
                return parent::render($e);
            }
            $this->code = 500;
            $this->msg = '服务器内部错误,不想告诉你';
            $this->errorCode = 999;
            $this->recordErrorLog($e);
        }
        $request = Request::instance();
        $result = [
            'msg' => $this->msg,
            'errorCode' => $this->errorCode,
            'request_url' => $request->url()
        ];
        return json($result, $this->code);
    }
    
    /** 错误日志处理
     *  这里把config里日志配置的type改为test
     * @param Exception $e
     */
    private function recordErrorLog(Exception $e)
    {
        // 开启日志
        Log::init([
            'type'  =>  'File',
            'path'  =>  LOG_PATH,
            'level' => ['error']
        ]);
        
        // 日志记录方法
        Log::record($e->getMessage(),'error');
    }
    
}
Nach dem Login kopieren

3. Ändern Sie die Konfigurationskonfiguration

// 异常处理handle类 留空使用 \think\exception\Handle
    'exception_handle'       => 'app\lib\exception\ExceptionHandle',
    
// 关闭日志    
'log'                    => [
        // 日志记录方式,内置 file socket 支持扩展
        // 关闭自动记录日志,请将type设置为test
        'type'  => 'test',
        // 日志保存目录
        'path'  => __DIR__.'/../log/',
        // 日志记录级别
        'level' => ['sql'],
    ],
Nach dem Login kopieren

4. Verwenden Sie die Fehlerklassenmethode

// 这里随便创建一个userControlelr
class UserController extends Controller {
    use app\api\model\User;
    
    /**
    * 根据 id 获取某个用户
    */
    public function getUser($id)
    {
        $user = User::get($id);
        
        // 如果 $user 为空 抛出自定义的错误,下面有...
        if(! $user) {
            throw UserMissException();
        }
        
        return json($user);
    }
}
Nach dem Login kopieren

Benutzerdefinierte Fehlerunterklasse

// 上面第一节,写的 Base 错误类派上用场了。 
class UserMissException extends BaseException
{
    /** HTTP 状态码
     * @var string
     */
    public $code = '404';
    /** 自定义错误码
     * @var string
     */
    public $errorCode = '40000';
    /** 错误信息
     * @var string
     */
    public $msg = '请求的用户不存在';
}
Nach dem Login kopieren

Fordern Sie diese getUser-Methode an und melden Sie einen Fehler kann weiterhin Ausnahmeunterklassen erstellen und diese Fehlereigenschaften definieren.

5. Zusammenfassung

Nicht nur im TP5-Framework, einschließlich des Laravel-Frameworks, können Sie auch die Rendermethode der Ausnahmeklasse selbst neu schreiben, um die gewünschten Fehlerrückgabedaten oder Seitenvorlagen zu erreichen.

Das obige ist der detaillierte Inhalt vonIn diesem Artikel wird erläutert, wie Sie globale Ausnahmen in thinkphp5 anpassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was soll ich tun, wenn ich beim Bereitstellen von thinkphp5 in Pagoda eine Fehlermeldung erhalte? Was soll ich tun, wenn ich beim Bereitstellen von thinkphp5 in Pagoda eine Fehlermeldung erhalte? Dec 19, 2022 am 11:04 AM

Lösung für den bei der Bereitstellung von thinkphp5 in Pagoda gemeldeten Fehler: 1. Öffnen Sie den Pagoda-Server, installieren Sie die PHP-Pathinfo-Erweiterung und aktivieren Sie sie. 2. Konfigurieren Sie die Datei „.access“ mit dem Inhalt „RewriteRule ^(.*)$ index.php ?s=/$1 [QSA ,PT,L]“; 3. Aktivieren Sie in der Website-Verwaltung einfach die Pseudostatik von thinkphp.

Was soll ich tun, wenn das Umschreiben der thinkphp5-URL fehlschlägt? Was soll ich tun, wenn das Umschreiben der thinkphp5-URL fehlschlägt? Dec 12, 2022 am 09:31 AM

Lösung dafür, dass das Umschreiben von thinkphp5-URLs nicht funktioniert: 1. Überprüfen Sie, ob das Modul mod_rewrite.so in der Konfigurationsdatei httpd.conf geladen ist. 2. Ändern Sie None in AllowOverride None in All. 3. Ändern Sie die Apache-Konfigurationsdatei .htaccess in „RewriteRule ^“. (.*)$ index.php [L,E=PATH_INFO:$1]“ und speichern Sie es.

So erhalten Sie die angeforderte URL in thinkphp5 So erhalten Sie die angeforderte URL in thinkphp5 Dec 20, 2022 am 09:48 AM

Methoden für thinkphp5 zum Abrufen der angeforderten URL: 1. Verwenden Sie die Methode „$request = Request::instance();“ der Klasse „\think\Request“, um die aktuellen URL-Informationen abzurufen Funktion „$request->url()“, um die vollständige URL-Adresse einschließlich des Domainnamens zu erhalten.

Was soll ich tun, wenn thinkphp5 post den Wert nicht abrufen kann? Was soll ich tun, wenn thinkphp5 post den Wert nicht abrufen kann? Dec 06, 2022 am 09:29 AM

thinkphp5-Beitrag kann keinen Wert abrufen, da TP5 die strpos-Funktion verwendet, um den app/json-String im Inhaltstypwert des Headers zu finden. Die Lösung besteht darin, den Inhaltstypwert des Headers auf app/json zu setzen.

So entfernen Sie das Titelleistensymbol von thinkphp5 So entfernen Sie das Titelleistensymbol von thinkphp5 Dec 20, 2022 am 09:24 AM

So entfernen Sie das thinkphp5-Titelleistensymbol: 1. Suchen Sie die Datei favicon.ico unter dem öffentlichen thinkphp5-Framework. 2. Löschen Sie die Datei oder wählen Sie ein anderes Bild aus, um sie in favicon.ico umzubenennen und die ursprüngliche Datei favicon.ico zu ersetzen.

Was soll ich tun, wenn thinkphp5 meldet, dass der Controller nicht existiert? Was soll ich tun, wenn thinkphp5 meldet, dass der Controller nicht existiert? Dec 06, 2022 am 10:43 AM

Lösung für die Meldung thinkphp5, dass der Controller nicht existiert: 1. Überprüfen Sie, ob der Namespace im entsprechenden Controller korrekt geschrieben ist, und ändern Sie ihn in den richtigen Namespace. 2. Öffnen Sie die entsprechende tp-Datei und ändern Sie den Klassennamen.

So fragen Sie die Daten von gestern in ThinkPHP5 ab So fragen Sie die Daten von gestern in ThinkPHP5 ab Dec 05, 2022 am 09:20 AM

So fragen Sie die Daten von gestern in ThinkPHP5 ab: 1. Öffnen Sie ThinkPHP5-bezogene Dateien. 2. Fragen Sie die Daten von gestern über den Ausdruck „db('table')->whereTime('c_time', 'yesterday')->select();“ ab .

So legen Sie Fehlermeldungen in thinkphp5 fest So legen Sie Fehlermeldungen in thinkphp5 fest Dec 07, 2022 am 10:31 AM

So legen Sie Fehleraufforderungen in thinkphp5 fest: 1. Geben Sie den öffentlichen Ordner im Projektstammverzeichnis ein und öffnen Sie die Eintragsdatei index.php. 2. Sehen Sie sich die Kommentare zum Debug-Modus-Schalter an. 3. Passen Sie den Wert der Konstante „APP_DEBUG“ an auf „true“ setzen, um eine Fehlermeldung anzuzeigen.

See all articles