ミドルウェアを使用して Laravel で例外を処理する方法
ミドルウェアは、Laravel フレームワークの重要な概念であり、リクエストがコントローラーに到達する前と後で例外を処理できます。一連の操作。一般的な権限の検証、ロギング、その他の機能に加えて、ミドルウェアを使用して例外を処理することもできます。この記事では、ミドルウェアを使用してLaravelで例外を処理する方法を検討し、具体的なコード例を示します。
まず、例外処理ミドルウェアを作成する必要があります。次のコマンドを実行してミドルウェア クラスを生成できます。
php artisan make:middleware ExceptionHandlerMiddleware
次に、生成されたミドルウェア クラス ファイルを開くと、クラスの構造が次のとおりであることがわかります。 handle メソッドを使用すると、要求された例外を処理できます。デモのために、あらゆる種類の例外をキャッチし、一律にエラー メッセージを返します。コードを次のように変更できます。
namespace AppHttpMiddleware; use Closure; class ExceptionHandlerMiddleware { public function handle($request, Closure $next) { return $next($request); } }
上記のコードでは、まずリクエストを実行して結果を取得しようとします。例外が発生した場合、例外情報、コード、ステータス コードを取得し、この情報を含む JSON 応答を返します。例外コードが 4xx または 5xx の範囲内にある場合は、その例外コードを応答ステータス コードとして使用します。それ以外の場合は、500 ステータス コードを返します。
次に、このミドルウェアをグローバル ミドルウェアまたは指定されたルーティング ミドルウェアに登録する必要があります。
app/Http/Kernel.php ファイル内の $middleware
属性を見つけて、ミドルウェア クラスを導入します。サンプル コードは次のとおりです。例外処理ミドルウェアがグローバルミドルウェアに登録されています。リクエストがコントローラーに到達したときに例外が発生すると、ミドルウェアによってキャッチされ、エラー情報を含む JSON 応答が返されます。 グローバルミドルウェアに加えて、指定したルートにミドルウェアを適用することもできます。
ファイルで
$routeMiddleware 属性を見つけて、次のコードを追加します: 上記は、Laravel で例外を処理するためにミドルウェアを使用する詳細な例です。例外処理ミドルウェアを利用することで、アプリケーション内で発生した例外をきめ細かく処理できるようになり、コードの可読性や保守性が向上します。この記事がお役に立てば幸いです! 以上がLaravelでミドルウェアを使用して例外を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>namespace AppHttpMiddleware;
use Closure;
use Exception;
use IlluminateHttpResponse;
class ExceptionHandlerMiddleware
{
public function handle($request, Closure $next)
{
try {
return $next($request);
} catch (Exception $exception) {
$message = $exception->getMessage();
$code = $exception->getCode();
$status = $exception->getCode() >= 400 && $exception->getCode() < 600 ? $exception->getCode() : 500;
return response()->json(['message' => $message, 'code' => $code], $status);
}
}
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
次に、ルート定義にミドルウェアを追加します。例は次のとおりです。 protected $middleware = [
...
AppHttpMiddlewareExceptionHandlerMiddleware::class,
...
];