間違い


レンダリングメソッド

  • レポート可能およびレンダリング可能な例外
  • # #HTTP 例外
  • カスタマイズされた HTTP エラー ページ
    • #はじめに
    • 新しい Laravel プロジェクトを開始すると、エラーと例外処理がすでに構成されています。
    App\Exceptions\Handler
  • クラスは、アプリケーションによってトリガーされたすべての例外を記録し、ユーザーに提示する役割を果たします。このドキュメントでは、このクラスについて詳しく説明します。
    • 構成

      config/app.php 構成ファイルの debug オプションは、エラーに関して実際にユーザーに表示される情報の量を決定します。デフォルトでは、このオプションの設定は、.env ファイルに保存されている APP_DEBUG 環境変数の値を尊重します。

      ローカル開発の場合は、 APP_DEBUG 環境変数の値を true に設定する必要があります。実稼働環境では、この値は常に false である必要があります。運用環境でこの値を true に設定すると、機密の構成値がアプリケーションのエンド ユーザーに公開される可能性があります。

      #例外ハンドラ

      レポート メソッド

      すべての例外は、

      App\Exceptions\Handler クラスによって処理されます。このクラスには、reportrender という 2 つのメソッドが含まれています。これらの方法について詳しく説明します。 report メソッドは、例外をログに記録したり、例外を Bugsnag や Sentry などの外部サービスに送信したりするために使用されます。デフォルトでは、report メソッドは例外をログに記録する基本クラスに例外を渡します。ただし、例外は任意の方法でログに記録できます。

      たとえば、さまざまな種類の例外を異なる方法で報告する必要がある場合は、PHP の

      instanceof 比較演算子を使用できます:

      /**
       * 报告或记录异常
       *
       * 此处是发送异常给 Sentry、Bugsnag 等外部服务的好位置。
       *
       * @param  \Exception  $exception
       * @return void
       */
       public function report(Exception $exception){  
         if ($exception instanceof CustomException) {     
            //    
          }   
         parent::report($exception);
       }

      {tip}

      report メソッドの instanceof チェックが多すぎます。代わりに Reportable 例外の使用を検討してください。

      グローバル ログ

      通常の状況では、Laravel は現在のユーザーの ID をデータとして各例外ログに自動的に追加します。

      App\Exceptions\Handler クラスの context メソッドをオーバーライドすることで、グローバル環境変数を定義できます。その後、この変数は各例外ログに含まれます:

      /**
       * 定义默认的环境变量
       *
       * @return array
       */
       protected function context(){  
         return array_merge(parent::context(), [    
             'foo' => 'bar',   
            ]);
         }

      report ヘルパー関数

      例外を報告する必要がある場合がありますが、現在のリクエストの処理を終了したくない。

      report ヘルパー関数を使用すると、例外ハンドラーの report メソッドを使用して、エラー ページを表示せずに例外を迅速に報告できます。

      public function isValid($value){  
        try {       
         // 验证值...  
         } 
          catch (Exception $e) {  
              report($e);   
              return false;   
            }
         }

      「無視される例外」と入力してください

      例外ハンドラーの

      $dontReport 属性には、ログに記録されない例外タイプのセットが含まれています。たとえば、404 エラーや他のいくつかの種類のエラーによって発生する例外はログ ファイルに書き込まれません。必要に応じて、この配列に他の例外タイプを追加できます:

      /**
       * 不应被报告的异常类型清单。
       *
       * @var array
       */protected $dontReport = [
          \Illuminate\Auth\AuthenticationException::class,
          \Illuminate\Auth\Access\AuthorizationException::class,
          \Symfony\Component\HttpKernel\Exception\HttpException::class,
          \Illuminate\Database\Eloquent\ModelNotFoundException::class,
          \Illuminate\Validation\ValidationException::class,];

      Render メソッド

      render メソッドは、指定された例外をブラウザに送り返される HTTP 応答に変換する役割を果たします。デフォルトでは、例外は応答を生成する基本クラスに渡されます。ただし、必要に応じて、例外タイプを確認したり、独自のカスタム応答を返すことができます:

      /**
       * 将异常转换为 HTTP 响应。
       *
       * @param  \Illuminate\Http\Request  $request
       * @param  \Exception  $exception
       * @return \Illuminate\Http\Response
       */
       public function render($request, Exception $exception){ 
          if ($exception instanceof CustomException) {     
             return response()->view('errors.custom', [], 500);  
            }  
           return parent::render($request, $exception);
         }

      ##レポート可能およびレンダリング可能な例外

      例外ハンドラーの

      report メソッドと render メソッドで例外タイプをチェックすることに加えて、カスタム メソッドで report と ## を直接定義することもできます。 #render メソッドは例外です。これらのメソッドが定義されると、フレームワークによって自動的に呼び出されます:

      <?php
        namespace App\Exceptions;use Exception;
        class RenderException extends Exception{   
              /**
           * 报告异常
           *
           * @return void
           */   
         public function report()  
           {    
             //   
            }    
           /**
           * 转换异常为 HTTP 响应
           *
           * @param  \Illuminate\Http\Request
           * @return \Illuminate\Http\Response
           */  
          public function render($request) 
             {     
                return response(...); 
              }
           }

      {tip}
      report

      メソッドと必要なパラメータを宣言すると、それらは自動的に呼び出されます。 Laravel のサービスコンテナによる インジェクションメソッド内

      #HTTP 例外
      HTTP を記述するためにいくつかの例外が使用されますサーバーから生成されたエラー コード。たとえば、「ページが見つかりません」エラー (404)、「不正エラー」(401)、さらには開発者によって引き起こされた 500 エラーなどです。

      abort

      ヘルパー関数を使用すると、アプリケーションのどこからでも次のような応答を生成できます。

      abort(404);
      ヘルパー関数 abort

      は、例外ハンドラ 。オプションで応答テキストを指定することもできます:

      abort(403, 'Unauthorized action.');

      カスタム HTTP エラー ページ
      Laravel はカスタム エラー ページを簡単に表示できますさまざまな HTTP ステータス コード。たとえば、404 HTTP ステータス コードのエラー ページをカスタマイズする場合は、

      resources/views/errors/404.blade.php

      ビュー ファイルを作成できます。このファイルは、アプリケーションによって生成されるすべての 404 エラーに使用されます。このディレクトリ内のビュー ファイルには、対応する HTTP ステータス コードと一致する名前を付ける必要があります。

      abort 関数によってスローされた HttpException インスタンスは、$Exception 変数としてビューに渡されます。

      <h2>{{ $exception->getMessage() }}</h2>
      ## を使用できます。 #vendor:publish エラー テンプレート ページを定義するためのアーティザン コマンド。テンプレート ページが生成されたら、テンプレート ページのコンテンツをカスタマイズできます。

      php artisan vendor:publish --tag=laravel-errors

      この記事は、LearnKu.com Web サイトで最初に公開されました。