Laravel은 웹 애플리케이션 구축을 위한 강력하고 유연한 시스템을 제공하는 인기 있는 PHP 프레임워크입니다. 그러나 개발 과정에서 요청 예외가 발생하는 것은 불가피합니다. 이 글에서는 Laravel 요청 예외를 처리하는 방법에 대해 설명합니다.
Laravel의 요청 예외는 프로그램 예외와 HTTP 예외의 두 가지 유형으로 나눌 수 있습니다.
프로그램 예외는 PHP에서 발생한 치명적인 오류, 포착되지 않은 예외 등 코드가 실행될 때 발생하는 예외입니다.
HTTP 예외는 404 찾을 수 없음, 500 내부 서버 오류 등 HTTP 요청에서 발생하는 예외를 의미합니다.
다른 유형의 예외에는 다른 처리 방법이 필요합니다.
프로그램 예외가 Laravel 컨트롤러에 나타날 수 있습니다. 처리하지 않으면 오류 메시지를 표시하는 페이지가 나타납니다. 이는 사용자가 보기를 기대하는 것이 아니므로 프로그램 예외를 처리해야 합니다.
Laravel은 프로그램 예외를 처리하는 두 가지 방법을 제공합니다. 첫 번째는 예외 처리기를 사용하는 것이고, 두 번째는 전역 예외 처리를 사용하는 것입니다.
2.1 예외 처리기
Laravel 예외 처리기는 애플리케이션에서 발생한 예외를 처리하는 클래스입니다. 예외가 발생했을 때 컨트롤러가 JSON 형식으로 응답을 반환하도록 하려면 사용자 지정 예외 처리기를 만들 수 있습니다. 예는 다음과 같습니다.
<?php namespace AppExceptions; use Exception; use IlluminateFoundationExceptionsHandler as ExceptionHandler; class Handler extends ExceptionHandler { /** * A list of the exception types that are not reported. * * @var array */ protected $dontReport = [ // ]; /** * Report or log an exception. * * @param Exception $exception * @return void */ public function report(Exception $exception) { parent::report($exception); } /** * Render an exception into an HTTP response. * * @param IlluminateHttpRequest $request * @param Exception $exception * @return IlluminateHttpResponse */ public function render($request, Exception $exception) { if ($exception instanceof IlluminateDatabaseEloquentModelNotFoundException) { return response()->json([ 'error' => 'Resource not found' ], 404); } return parent::render($request, $exception); } }
이 예에서는 Laravel의 예외 처리기 클래스를 상속하고 render
메서드를 재정의합니다. render
메소드에서 예외 유형이 IlluminateDatabaseEloquentModelNotFoundException
인지 확인합니다. 그렇다면 JSON 형식의 응답을 반환합니다. render
方法。在 render
方法中,我们检查了异常类型是否是 IlluminateDatabaseEloquentModelNotFoundException
。如果是,我们返回一个 JSON 格式的响应。
我们还可以在这个方法中处理其他的程序异常。这种处理方式的好处是,我们可以为每种类型的异常编写自定义的处理器。这样我们就能够预测到我们会得到什么样的响应。
2.2 全局异常处理
使用全局异常处理,我们可以捕获应用程序中的所有异常,而不是为每种异常编写单独的处理器。下面是一个例子:
<?php namespace AppExceptions; use Exception; use IlluminateFoundationExceptionsHandler as ExceptionHandler; class Handler extends ExceptionHandler { /** * A list of the exception types that are not reported. * * @var array */ protected $dontReport = [ // ]; /** * Report or log an exception. * * @param Exception $exception * @return void */ public function report(Exception $exception) { parent::report($exception); } /** * Render an exception into an HTTP response. * * @param IlluminateHttpRequest $request * @param Exception $exception * @return IlluminateHttpResponse */ public function render($request, Exception $exception) { if ($exception instanceof SymfonyComponentHttpKernelExceptionHttpException) { $code = $exception->getStatusCode(); return response()->json([ 'error' => 'HTTP Exception', 'status' => $code ], $code); } return parent::render($request, $exception); } /** * Render the given HttpException. * * @param SymfonyComponentHttpKernelExceptionHttpException $e * @return IlluminateHttpResponse */ protected function renderHttpException(HttpException $e) { $status = $e->getStatusCode(); if (view()->exists("errors.{$status}")) { return response()->view("errors.{$status}", ['exception' => $e], $status, $e->getHeaders()); } else { return $this->convertExceptionToResponse($e); } } }
在这个例子中,我们重写了 render
方法,检查异常类型是否是 SymfonyComponentHttpKernelExceptionHttpException
。如果是,我们创建了一个 JSON 格式的响应,包括错误消息和 HTTP 状态码。
如果我们需要呈现 HTML 页面,我们还可以重写 renderHttpException
方法,以渲染自定义的异常页面。
Laravel 提供了一种简单的方法处理 HTTP 异常。通过自定义 app/Exceptions/Handler.php
中的 render
方法,我们可以返回指定的 HTTP 状态码。以下是一个例子:
public function render($request, Exception $exception) { if ($this->isHttpException($exception)) { return $this->renderHttpException($exception); } else { return parent::render($request, $exception); } } protected function renderHttpException(HttpException $exception) { return response()->view('errors.' . $exception->getStatusCode(), [], $exception->getStatusCode()); }
在上面的例子中,我们检查异常是否是 HTTP 异常。如果是,我们使用 getStatusCode
方法获取 HTTP 状态码,并将其用作视图名称。在这个例子中,我们只是返回了一个对应状态码的视图。
在本文中,我们介绍了 Laravel 中程序和 HTTP 异常的处理方法。我们学习了如何使用异常处理器和全局异常处理来处理程序异常,以及如何自定义 render
render
메서드를 재정의하여 예외 유형이 SymfonyComponentHttpKernelExceptionHttpException
인지 확인합니다. 그렇다면 오류 메시지와 HTTP 상태 코드를 포함하는 JSON 형식의 응답을 생성합니다. 🎜🎜HTML 페이지를 렌더링해야 하는 경우 renderHttpException
메서드를 재정의하여 사용자 정의 예외 페이지를 렌더링할 수도 있습니다. 🎜app/Exceptions/Handler.php
에서 render
메서드를 사용자 정의하면 지정된 HTTP 상태 코드를 반환할 수 있습니다. 예는 다음과 같습니다. 🎜rrreee🎜위 예에서는 예외가 HTTP 예외인지 확인합니다. 그렇다면 getStatusCode
메소드를 사용하여 HTTP 상태 코드를 가져와서 뷰 이름으로 사용합니다. 이 예에서는 상태 코드에 해당하는 뷰만 반환합니다. 🎜render
메서드를 사용자 정의하여 HTTP 예외를 처리하는 방법을 배웠습니다. Laravel 개발자가 예외를 올바르게 처리하는 것은 매우 중요합니다. 이러한 기술을 사용함으로써 우리는 애플리케이션의 동작을 보다 정확하게 제어하여 애플리케이션의 신뢰성과 안정성을 향상시킬 수 있습니다. 🎜위 내용은 laravel 요청 예외 처리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!