Yii 프레임워크의 오류 및 예외 처리: 종합 가이드

王林
풀어 주다: 2023-09-02 15:18:02
원래의
799명이 탐색했습니다.

处理 Yii 框架中的错误和异常:综合指南

소개

오늘 튜토리얼에서는 Yii의 오류 및 예외 처리 방법을 소개하고 몇 가지 입문 시나리오를 안내해 드리겠습니다.

Yii가 무엇인지 알고 싶으세요? Yii 프레임워크 소개 및 Yii2 프로그래밍 시리즈를 확인하세요.

오류와 예외의 차이점은 무엇인가요?

버그는 코드의 예상치 못한 결함으로, 종종 사용자가 먼저 발견합니다. 일반적으로 프로그램 실행을 중단합니다. 사용자를 위해 정상적으로 중단하는 것뿐만 아니라 문제를 해결할 수 있도록 개발자에게 문제를 알리는 것도 중요합니다.

개발자는 잠재적으로 예측 가능한 오류 조건이 발생할 때 예외를 생성합니다. 예외가 발생할 수 있는 코드에서 개발자는 강력한 오류 처리기에 예외를 throw()할 수 있습니다.

Yii는 이를 어떻게 관리하나요?

Yii에서는 치명적이지 않은 PHP 오류(예: 경고 및 알림)가 포착 가능한 예외로 라우팅되므로 이에 대응하는 방법을 결정할 수 있습니다. 이러한 모든 예외를 처리하는 컨트롤러 작업을 지정할 수 있습니다. HTML, JSON, XML 등과 같은 오류 표시 형식을 사용자 정의할 수도 있습니다.

예외 및 치명적인 PHP 오류는 디버그 모드에서만 평가할 수 있습니다. 이러한 유형의 개발 시나리오에서 Yii는 자세한 호출 스택 정보와 소스 코드 조각을 표시할 수 있습니다 (위 헤더 이미지에서 확인할 수 있음) .

치명적인 오류는 애플리케이션 실행을 방해하는 이벤트 유형입니다. 여기에는 메모리 부족, 존재하지 않는 클래스의 개체 인스턴스화 또는 존재하지 않는 함수 호출이 포함됩니다.

예:

으아아아

오류 및 예외 처리의 몇 가지 예를 살펴보는 것부터 시작하겠습니다.

구성 오류 및 예외 처리

먼저, frontend/config/main.php에서 애플리케이션을 구성합니다. errorHandler는 아래와 같이 구성 요소로 정의됩니다. 이 예는 저의 스타트업 시리즈 애플리케이션인 Meeting Planner에서 가져온 것입니다. errorHandlercomponents의 구성을 참고하세요:

으아아아

위의 예에서 errorAction는 사용자에게 내 SiteController의 잘못된 작업을 안내합니다.

더 광범위하게 Yii는 errorHandler 리디렉션 및 데이터 수집을 위한 다양한 구성 옵션을 제공합니다.

속성 유형 설명
$callStackItemView 문자열 예외 및 오류 호출 스택 요소를 렌더링하는 데 사용되는 보기 파일의 경로입니다. 예를 들어 '@yii/views/errorHandler/callStackItem.php'
$displayVars 배열 오류 페이지에 표시되어야 하는 PHP 사전 정의 변수 목록입니다. 예를 들어 ['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION']
$errorAction 문자열 외부 오류(예: site/error)를 표시하는 컨트롤러 작업에 대한 경로입니다.
$errorView 문자열 호출 스택 정보 없이 예외를 렌더링하는 데 사용되는 보기 파일의 경로입니다. 예를 들어 '@yii/views/errorHandler/error.php'
$예외 보기 문자열 예외를 렌더링하는 보기 파일의 경로입니다. 예를 들어 '@yii/views/errorHandler/Exception.php'
$maxSourceLines 정수 표시할 최대 소스 코드 줄 수.
$maxTraceSourceLines 정수 표시할 추적 소스 코드 줄의 최대 수입니다.
$previousExceptionView 문자열 이전 예외를 렌더링하는 데 사용된 보기 파일의 경로입니다. 예를 들어 '@yii/views/errorHandler/previousException.php'

使用 errorActions 直接执行

通常,当用户遇到严重错误时,我们希望将他们重定向到友好的、描述性的错误页面。

这就是 errorHandler 中的 errorAction 的作用。它重定向到我们的 SiteController 的 actionError:

return [
    'components' => [
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
    ]
];
로그인 후 복사

在我们的 SiteController 中,我们定义了一个显式的 error 操作:

namespace app\controllers;

use Yii;
use yii\web\Controller;

class SiteController extends Controller
{
    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
        ];
    }
}
로그인 후 복사

这是一个基本的错误处理程序(您可以在此处阅读有关这些内容的更多信息):

public function actionError()
{
    $exception = Yii::$app->errorHandler->exception;
    if ($exception !== null) {
        return $this->render('error', ['exception' => $exception]);
    }
}
로그인 후 복사

无论是否存在错误或页面请求是否在您的应用程序中不存在,您也可以做出不同的响应:

public function actionError()
    {
        $exception = Yii::$app->errorHandler->exception;
        if ($exception instanceof \yii\web\NotFoundHttpException) {
            // all non existing controllers+actions will end up here
            return $this->render('pnf'); // page not found
        } else {
          return $this->render('error', ['exception' => $exception]);
        }
    }
로그인 후 복사

这是我当前的 Page Not Found 404 错误处理程序:

处理 Yii 框架中的错误和异常:综合指南

理论上,您可以包含链接的站点地图、与页面请求类似的建议页面、搜索功能和联系支持错误页面上的链接。所有这些都可以帮助用户恢复并优雅地继续前进。

这是我当前的一般错误页面(显然我需要添加功能)

处理 Yii 框架中的错误和异常:综合指南

捕获异常

如果我们想要监视一段代码是否存在问题,我们可以使用 PHP try catch 块。下面,我们将通过触发致命除以零错误进行实验:

use Yii;
use yii\base\ErrorException;

...

    try {
        10/0;
    } catch (ErrorException $e) {
        Yii::warning("Division by zero.");
    }
    
...
로그인 후 복사

上面的 catch 响应是为日志生成警告。 Yii 有广泛的日志记录:

  • Yii::trace():记录一条消息以跟踪一段代码的运行情况。主要用于开发。
  • Yii::info():记录一条消息,传达有关事件的信息。
  • Yii::warning():记录发生意外事件的警告消息
  • Yii::error():记录一个致命错误以供调查

如果您希望将用户定向到我们之前配置的错误页面,而不是记录事件,则可以通过事件抛出异常:

use yii\web\NotFoundHttpException;

throw new NotFoundHttpException();
로그인 후 복사

下面是我们抛出带有特定 HTTP 状态代码和自定义消息的异常的示例:

  try {
          10/0;
      } catch (ErrorException $e) {
        throw new \yii\web\HttpException(451,
            'Tom McFarlin\'s humor is often lost on me
                (and lots of people).');
    }
로그인 후 복사

对于用户来说,该代码如下所示:

处理 Yii 框架中的错误和异常:综合指南

关于 Yii 日志记录

Yii 中的所有错误都会根据您的设置方式进行记录。您可能还对我有关用于登录 Yii 的 Sentry 和 Rollbar 的教程感兴趣:

  • 处理 Yii 框架中的错误和异常:综合指南

    构建您的初创公司:错误日志

    处理 Yii 框架中的错误和异常:综合指南

Yii

结束时

我希望您喜欢我们对错误和异常处理的探索。请关注我们的“使用 Yii2 编程”系列中即将推出的教程,我们将继续深入探讨该框架的不同方面。

如果您想更深入地了解 Yii 应用程序开发,请查看我们的使用 PHP 构建您的初创公司系列,该系列使用 Yii2 的高级模板。它讲述了对 Meeting Planner 的每个步骤进行编程的故事。如果您想从头开始学习如何在 Yii 中构建应用程序,它会非常有用。

如果您想知道下一个 Yii2 教程何时发布,请在 Twitter 上关注我@lookahead_io 或查看我的讲师页面。

相关链接

  • yii\web\ErrorHandler 文档
  • 处理错误(Yii 2.0 权威指南)
  • 日志记录(Yii 2.0 权威指南)
  • Yii2 Developer Exchange(作者的资源网站)

위 내용은 Yii 프레임워크의 오류 및 예외 처리: 종합 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿