間違い
レンダリングメソッド
- レポート可能およびレンダリング可能な例外
- # #HTTP 例外
- カスタマイズされた HTTP エラー ページ
- #はじめに 新しい Laravel プロジェクトを開始すると、エラーと例外処理がすでに構成されています。
クラスは、アプリケーションによってトリガーされたすべての例外を記録し、ユーザーに提示する役割を果たします。このドキュメントでは、このクラスについて詳しく説明します。 構成
config/app.php
構成ファイルのdebug
オプションは、エラーに関して実際にユーザーに表示される情報の量を決定します。デフォルトでは、このオプションの設定は、.env
ファイルに保存されているAPP_DEBUG
環境変数の値を尊重します。ローカル開発の場合は、
#例外ハンドラレポート メソッドすべての例外は、APP_DEBUG
環境変数の値をtrue
に設定する必要があります。実稼働環境では、この値は常にfalse
である必要があります。運用環境でこの値をtrue
に設定すると、機密の構成値がアプリケーションのエンド ユーザーに公開される可能性があります。App\Exceptions\Handler
たとえば、さまざまな種類の例外を異なる方法で報告する必要がある場合は、PHP のクラスによって処理されます。このクラスには、
reportと
renderという 2 つのメソッドが含まれています。これらの方法について詳しく説明します。
reportメソッドは、例外をログに記録したり、例外を Bugsnag や Sentry などの外部サービスに送信したりするために使用されます。デフォルトでは、
reportメソッドは例外をログに記録する基本クラスに例外を渡します。ただし、例外は任意の方法でログに記録できます。
instanceof
比較演算子を使用できます:
/** * 报告或记录异常 * * 此处是发送异常给 Sentry、Bugsnag 等外部服务的好位置。 * * @param \Exception $exception * @return void */ public function report(Exception $exception){ if ($exception instanceof CustomException) { // } parent::report($exception); }
{tip}
グローバル ログ通常の状況では、Laravel は現在のユーザーの ID をデータとして各例外ログに自動的に追加します。report
メソッドの
instanceofチェックが多すぎます。代わりに Reportable 例外の使用を検討してください。
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
{tip}メソッドと
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(...); } }
report
#HTTP 例外HTTP を記述するためにいくつかの例外が使用されますサーバーから生成されたエラー コード。たとえば、「ページが見つかりません」エラー (404)、「不正エラー」(401)、さらには開発者によって引き起こされた 500 エラーなどです。メソッドと必要なパラメータを宣言すると、それらは自動的に呼び出されます。 Laravel のサービスコンテナによる インジェクションメソッド内
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 サイトで最初に公開されました。