溫馨提示×

          Laravel中如何進行異常處理

          發布時間:2022-10-09 17:45:05 來源:億速云 閱讀:51 作者:iii 欄目:編程語言

          這篇文章主要介紹“Laravel中如何進行異常處理”,在日常操作中,相信很多人在Laravel中如何進行異常處理問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Laravel中如何進行異常處理”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

          基本配置

          在開始研究異常處理類之前,讓我們先來看看幾個和異常相關且很重要的參數配置。

          打開 config/app.php 文件,并仔細的看看下面的代碼片段。

          ...
          ...
          /*
          |--------------------------------------------------------------------------
          | 應用的調試模式
          |--------------------------------------------------------------------------
          |
          | 當引用處于調試模式,將會顯示錯誤產生式的詳細堆棧信息
          | 如果禁用,則只顯示一個簡單的錯誤頁面
          |
          */
          
          'debug' => env('APP_DEBUG', false),
          ...
          ...

          從參數的名稱可以猜到,如果設置為 TRUE,將有利于我們調試應用產生的錯誤。默認值由 .env 環境變量配置文件中的  APP_DEBUG 參數指定。

          在開發環境下,建議你將它設置為 TRUE ,這樣,通過清晰的錯誤堆棧信息,能很快的定位錯誤產生的原因并修復。 另外,當處于正式環境是,我們需要通過環境變量的配置項來關閉它,當錯誤產生式將只顯示通用的提示頁面。

          除了將錯誤顯示在頁面上,Laravel 也允許你將錯誤記錄到日志文件中?,F在,讓我們來看看日志相關的配置,打開 config/app.php 文件,并仔細的看看下面的代碼片段。

          ...
          ...
          'log' => env('APP_LOG', 'single'),
          
          'log_level' => env('APP_LOG_LEVEL', 'debug'),
          ...
          ...

          Laravel 框架中,是使用 Monolog 庫來記錄日志的。你可以通過上面的配置項來配置 Monolog 庫。

          默認的日志文件保存路徑為 storage/logs/laravel.log,通常情況下,你無需更改它。與此同時,你可以通過  APP_LOG_LEVEL 來指定需要被記錄到日志文件的錯誤級別。

          前面介紹了異常和日志的基本配置。

          接下來,我們看看 Laravel 應用默認的異常處理類。打開 app/Exceptions/Handler.php 文件.

          expectsJson()) {
                      return response()->json(['error' => 'Unauthenticated.'], 401);
                  }
          
                  return redirect()->guest(route('login'));
              }
          }

          上面的處理類主要包含2個功能:報告和顯示所有的異常信息。

          讓我們仔細看一眼 report 方法。

          /**
           * 報告或記錄一個異常。
           *
           * 這是一個將異常發送給 Sentry 和 Bugsnag 等機構的好時機。
           *
           * @param  \Exception  $exception
           * @return void
           */
          public function report(Exception $exception)
          {
              parent::report($exception);
          }

          report 方法用于將錯誤記錄到日志文件中。同時,關注一項重要的 dontReport 屬性,它列出了所有不應該被記錄到日志的異常類別。

          接下來,我們介紹 render 方法。

          /**
           * 將異常渲染至 HTTP 響應值中。
           *
           * @param  \Illuminate\Http\Request  $request
           * @param  \Exception  $exception
           * @return \Illuminate\Http\Response
           */
          public function render($request, Exception $exception)
          {
              return parent::render($request, $exception);
          }

          如果說 report 方法是用于記錄或報告錯誤,那么 render 方法是用于將錯誤渲染顯示在屏幕上。事實上,當異常發生時,這個方法決定了哪些內容將被展示給用戶。

          render 方法也允許你針對不同類別的錯誤自定義響應值,這部分內容我們將在下一章學習。

          最后, unauthenticated 方法處理了 AuthenticationException 異常,你能夠在此決定當用戶訪問了一個未授權頁面時所展示的內容。

          自定義異常類

          在這一節,我們將創建一個自定義異常類,用于處理 CustomException 類別的異常。創建自定義異常類背后的想法是更輕松地管理自定義異常同時顯示自定義響應。

          開始著手創建一個文件 app/Exceptions/CustomException.php ,內容如下所示。

          view(
                          'errors.custom',
                          array(
                              'exception' => $this
                          )
                  );
              }
          }

          重要的是需要注意 CustomException 類必須繼承核心 Exception 類。為了演示用途,我們僅僅討論了 render 方法,但顯然你也能夠自定義修改 report 方法。

          正如你看到的,在樣例中我們將用戶重定向至 errors.custom 錯誤頁面。通過這種方式,你能夠為特定類型的異常實現自定義的錯誤頁面。

          當然,我們需要創建一個關聯的視圖文件 resources/views/errors/custom.blade.php。

          Exception details: {{ $exception->getMessage() }}

          登錄后復制

          這是一個相當簡單的視圖文件,只顯示一行錯誤消息,不過你也可以按照自己希望的方式設計這個視圖。

          我們也需要在 app/Exceptions/Handler.php 文件的 render 方法中進行一些修改,保證我們的自定義異常類能夠被調用。讓我們將 app/Exceptions/Handler.php 文件中的 render 方法替換為以下內容。

          ...
          ...
          /**
           * 將異常渲染至 HTTP 響應值中。
           *
           * @param  \Illuminate\Http\Request  $request
           * @param  \Exception  $exception
           * @return \Illuminate\Http\Response
           */
          public function render($request, Exception $exception)
          {
              if ($exception instanceof \App\Exceptions\CustomException)  {
                  return $exception->render($request);
              }
          
              return parent::render($request, $exception);
          }
          ...
          ...

          正如你所看到的,我們會在 render 方法中首先檢查異常的類型。如果異常的類別是 \App\Exceptions\CustomException ,我們將調用這個類的 render 方法。

          一切準備就緒?,F在我們創建一個控制  app/Http/Controllers/ExceptionController.php  來測試自定義的異常類。

          <?php
          namespace App\Http\Controllers;
          
          use App\Http\Controllers\Controller;
          
          class ExceptionController extends Controller
          {
              public function index()
              {
                  // 出錯了,你可以拋出自定義的異常 CustomException
                  throw new \App\Exceptions\CustomException('Something Went Wrong.');
              }
          }

          當然,你需要先在 routes/web.php 文件中添加相關的路由,就像下面一樣。

          // Exception routes
          Route::get('exception/index', 'ExceptionController@index');

          之后,你可以瀏覽 http://your-laravel-site.com/exception/ind... 地址來查看是否和預期的一樣。一切正常的話,頁面將顯示我們前面配置 errors.custom 視圖。

          到此,關于“Laravel中如何進行異常處理”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

          推薦閱讀:MVC中如何進行全局異常處理

          免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

          主題地圖

          超级A片免费看