<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                和PHP默認的異常處理不同,ThinkPHP拋出的不是單純的錯誤信息,而是一個人性化的錯誤頁面。 [TOC=2,2] ## 異常顯示 新版的異常頁面顯示會自動判斷當前的請求是否為Json請求,如果是JSON請求則采用JSON格式輸出異常信息,否則按照HTML格式輸出。 在調試模式下,系統默認展示的異常頁面: ![](https://box.kancloud.cn/cc2522ef8a6b4c94f2ca1421619e87ca_736x642.png) >[info]只有在調試模式下面才能顯示具體的錯誤信息,如果在部署模式下面,你可能看到的是一個簡單的提示文字,例如: ![](https://img.kancloud.cn/5c/f8/5cf8baf61164b7a2d2f7e4a56a233273_881x183.png) 你可以通過設置`exception_tmpl`配置參數來自定義你的異常頁面模板,默認的異常模板位于: ~~~ thinkphp/tpl/think_exception.tpl ~~~ 你可以在應用配置文件`app.php`中更改異常模板 ~~~ // 自定義異常頁面的模板文件 'exception_tmpl' => \think\facade\App::getAppPath() . 'template/exception.tpl', ~~~ 默認的異常頁面會返回`500`狀態碼,如果是一個`HttpException`異常則會返回HTTP的錯誤狀態碼。 ## 異常處理接管 >[danger] 本著嚴謹的原則,框架會對任何錯誤(包括警告錯誤)拋出異常。系統產生的異常和錯誤都是程序的隱患,要盡早排除和解決,而不是掩蓋。對于應用自己拋出的異常則做出相應的捕獲處理。 框架支持異常處理由開發者自定義類進行接管,需要在`app`目錄下面的`provider.php`文件中綁定異常處理類,例如: ~~~ // 綁定自定義異常處理handle類 'think\exception\Handle' => '\\app\\exception\\Http', ~~~ 自定義類需要繼承`think\exception\Handle`并且實現`render`方法,可以參考如下代碼: ~~~ <?php namespace app\common\exception; use think\exception\Handle; use think\exception\HttpException; use think\exception\ValidateException; use think\Response; use Throwable; class Http extends Handle { public function render($request, Throwable $e): Response { // 參數驗證錯誤 if ($e instanceof ValidateException) { return json($e->getError(), 422); } // 請求異常 if ($e instanceof HttpException && $request->isAjax()) { return response($e->getMessage(), $e->getStatusCode()); } // 其他錯誤交給系統處理 return parent::render($request, $e); } } ~~~ 自定義異常處理的主要作用是根據不同的異常類型發送不同的狀態碼和響應輸出格式。 >[danger] 事實上,默認安裝應用后,已經幫你內置了一個`app\ExceptionHandle`異常處理類,直接修改該類的相關方法即可完成應用的自定義異常處理機制。 >[info] 需要注意的是,如果自定義異常處理類沒有再次調用系統`render`方法的話,配置`http_exception_template`就不再生效,具體可以參考`Handle`類內實現的功能。 ## 手動拋出和捕獲異常 ThinkPHP大部分情況異常都是自動拋出和捕獲的,你也可以手動使用`throw`來拋出一個異常,例如: ~~~ // 使用think自帶異常類拋出異常 throw new \think\Exception('異常消息', 10006); ~~~ 手動捕獲異常方式是使用`try-catch`,例如: ~~~ try { // 這里是主體代碼 } catch (ValidateException $e) { // 這是進行驗證異常捕獲 return json($e->getError()); } catch (\Exception $e) { // 這是進行異常捕獲 return json($e->getMessage()); } ~~~ > 支持使用`try-catch-finally`結構捕獲異常。 ## HTTP 異常 可以使用`\think\exception\HttpException`類來拋出異常 框架提供了一個`abort`助手函數快速拋出一個HTTP異常: ~~~ <?php namespace app\index\controller; class Index { public function index() { // 拋出 HTTP 異常 throw new \think\exception\HttpException(404, '異常消息'); } } ~~~ 系統提供了助手函數`abort`簡化HTTP異常的處理,例如: 框架提供了一個`abort`助手函數快速拋出一個HTTP異常: ~~~ <?php namespace app\index\controller; class Index { public function index() { // 拋出404異常 abort(404, '頁面異常'); } } ~~~ 如果你的應用是API接口,那么請注意在客戶端首先判斷HTTP狀態碼是否正常,然后再進行數據處理,當遇到錯誤的狀態碼的話,應該根據狀態碼自行給出錯誤提示,或者采用下面的方法進行自定義異常處理。 **部署模式**下一旦拋出了`HttpException`異常,可以定義單獨的異常頁面模板,只需要在`app.php`配置文件中增加: ~~~ 'http_exception_template' => [ // 定義404錯誤的模板文件地址 404 => \think\facade\App::getAppPath() . '404.html', // 還可以定義其它的HTTP status 401 => \think\facade\App::getAppPath() . '401.html', ] ~~~ 模板文件支持模板引擎中的標簽。 > `http_exception_template`配置僅在部署模式下面生效。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看