红穆笔记
首頁 語言筆記 thinkPHP6重寫異常拋出,多應用,利用ExceptionHandle.php和provider.php
語言筆記 PHP

thinkPHP6重寫異常拋出,多應用,利用ExceptionHandle.php和provider.php

thinkPHP6重写异常抛出,多应用,利用ExceptionHandle.php和provider.php

在 ThinkPHP 6 中,當你需要在多個應用中重寫異常處理方式時,可以分別在應用中的 ExceptionHandle.phpprovider.php 中進行配置。

ExceptionHandle.php 文件用於處理應用程序中的異常,而 provider.php 文件用於設置應用程序中的服務提供者。

以下是一個簡單的例子:

假設你正在開發一個名爲 myapp 的應用程序,它有三個模塊:adminhomeapi。我們想要在應用程序的多個模塊中重寫異常處理。

  1. 在每個模塊下的 ExceptionHandle.php 文件中重寫 render 方法:
    // admin/exception/ExceptionHandle.php
    namespace app\admin\exception;
    
    use think\exception\Handle;
    use think\Response;
    
    class ExceptionHandle extends Handle
    {
        public function render($request, \Throwable $e): Response
        {
            // 自定義異常處理方式
            return "Admin 發生了錯誤:" . $e->getMessage();
        }
    }
    // home/exception/ExceptionHandle.php
    namespace app\home\exception;
    
    use think\exception\Handle;
    use think\Response;
    
    class ExceptionHandle extends Handle
    {
        public function render($request, \Throwable $e): Response
        {
            // 自定義異常處理方式
            return "Home 發生了錯誤:" . $e->getMessage();
        }
    }
    // api/exception/ExceptionHandle.php
    namespace app\api\exception;
    
    use think\exception\Handle;
    use think\Response;
    
    class ExceptionHandle extends Handle
    {
        public function render($request, \Throwable $e): Response
        {
            // 自定義異常處理方式
            return "API 發生了錯誤:" . $e->getMessage();
        }
    }
    1. 在每個模塊下的 provider.php 文件中註冊服務提供者:
      // admin/provider.php
      use app\admin\exception\ExceptionHandle;
      // 註冊異常處理器
      \think\facade\Event::listen('HttpException', ExceptionHandle::class);
      \think\facade\Event::listen('Throwable', ExceptionHandle::class);
      
      // home/provider.php
      use app\home\exception\ExceptionHandle;
      // 註冊異常處理器
      \think\facade\Event::listen('HttpException', ExceptionHandle::class);
      \think\facade\Event::listen('Throwable', ExceptionHandle::class);
      
      // api/provider.php
      use app\api\exception\ExceptionHandle;
      // 註冊異常處理器
      \think\facade\Event::listen('HttpException', ExceptionHandle::class);
      \think\facade\Event::listen('Throwable', ExceptionHandle::class);

在上面的代碼中,我們分別在每個應用程序模塊下的 ExceptionHandle.php 文件中重寫了 render 方法來處理異常,並在每個模塊下的 provider.php 文件中註冊了對應的服務提供者來監聽異常並調用激活對應的異常處理類。

如果你不想在每個應用程序模塊下重複創建 ExceptionHandle.phpprovider.php 文件,你可以將它們放在默認模塊或者全局中來減少代碼重複。

需要注意的是,當更改了應用程序的異常處理方式後,請確保刪除相關應用程序的緩存,否則可能仍然調用原來的異常處理類。

微信赞赏

微信

支付宝赞赏

支付寶

✍️ 作者: 紅穆

網站管理員 · 感謝閱讀,更多精彩內容敬請關注

作者主頁 查看主頁 →

相關文章

PHP ob函数记录

PHP ob函數記錄 語言筆記 PHP

下面3個函數的用法 ob_get_contents(); ob_end_clean(); ob_start(); 可以藉助這幾個函數實現緩衝本地文件,以及執行本地腳本代碼。 使用ob_start()把輸出的代碼存到緩衝區,頁面不會顯示出來; 然後用ob_get_contents得到緩衝區的數據。 o…
👁 141
PHP preg

PHP preg 語言筆記 PHP

preg_match_all 函數用於執行一個全局正則表達式匹配。preg_match_all() 語法int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG…
👁 169
PHP 三元运算符与if的详解

PHP 三元運算符與if的詳解 語言筆記 PHP

三元運算符語條件 ? 結果1 : 結果2 說明:問號前面的位置是判斷的條件,如果滿足條件時結果1,不滿足時結果2。本文對三元運算符和if...else...進行對比詳解,希望對大家有所幫助。今天在改論文在線的時候遇到了一個語句看不懂:$if_summary = $row['IF_SUMMARY']=…
👁 189
PHP强制转换类型

PHP強制轉換類型 語言筆記 PHP PHP採集 PHP與mysql

獲取數據類型1.如果想查看某個表達式的值和類型,用var_dump()。 2.如果只是想得到一個易讀懂的類型的表達方式用於調試,用 gettype()。3.要查看某個類型,不要用 gettype(),而用is_type() 函數。字符串轉換爲數值當一個字符串被當作數字來求值時,根據以下規則來決定結果…
👁 232
php 字符串中是否包含指定字符串的多种方法

php 字符串中是否包含指定字符串的多種方法 語言筆記 PHP

strstrstrstr() 函數搜索一個字符串在另一個字符串中的第一次出現。該函數返回字符串的其餘部分(從匹配點)。如果未找到所搜索的字符串,則返回 false。代碼如下:<?php $email = 'user@example.com'; $domain = strstr($email, …
👁 138

推薦閱讀

展示平台3(数据不同步) 0446

展示平臺3(數據不同步) 0446 實用收藏 pbootcms模板

該模板適用於展示平臺3,但數據不同步。適合作爲獨立展示站點使用,內容管理靈活,不與主站數據關聯,便於進行差異化內容運營。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:www.4s5.cn相關文章PbootCMS 安全運維完全指南pbootcms源碼…
👁 52
钣金加工制造类网站模板 0018

鈑金加工製造類網站模板 0018 實用收藏 易優模板

此套eyoucms模板適用於鈑金加工製造類企業,設計風格硬朗專業,能夠展示鈑金產品、加工工藝及工業應用。有助於鈑金製造企業在線上展示生產實力,吸引工業製造客戶。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易優CMS(Eyo…
👁 67
轻钢别墅建筑建造装修类网站模板 0803

輕鋼別墅建築建造裝修類網站模板 0803 實用收藏 易優模板

此套eyoucms模板適用於輕鋼別墅建築、建造與裝修類行業,設計風格現代環保,能夠展示輕鋼別墅產品、建築案例及裝修設計方案。有助於新型建築企業在線上展示綠色建築理念與實力。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易優C…
👁 46
带会员系统的模板 0447

帶會員系統的模板 0447 實用收藏 pbootcms模板

這是一款帶有會員系統的PbootCMS網站模板。支持用戶註冊、登錄、會員等級管理等功能,非常適合搭建付費閱讀、資源下載或社羣類網站。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:www.4s5.cn相關文章PbootCMS 安全運維完全指南pboo…
👁 40
大理石厂家瓷砖销售模板 0019

大理石廠家瓷磚銷售模板 0019 實用收藏 易優模板

一款針對大理石廠家與瓷磚銷售行業的eyoucms網站模板。設計風格時尚大氣,能夠很好地展示大理石產品、瓷磚系列及空間應用案例。有助於建材品牌在線上提升形象,吸引設計師與業主。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易優…
👁 64