찾다
백엔드 개발PHP7PHP가 Yii 프레임워크에서 오류와 예외를 처리하는 방법을 설명하는 예

Yii는 기본적으로 CApplication에 예외 및 오류 인계를 구현했으며 이는 PHP의 set_Exception_handler 및 set_error_handler를 통해 구현됩니다. 이 두 가지 PHP 내장 함수를 통해 프로그램에서 발견되지 않은 예외 및 오류를 처리할 수 있어 프로그램의 유지 관리성이 향상됩니다.

PHP가 Yii 프레임워크에서 오류와 예외를 처리하는 방법을 설명하는 예

기본적으로 Yii는 CApplication::handleException에 예외 처리를 할당하고 CApplication::handleError에 오류 처리를 할당하지만 항목 파일에서 두 상수 YII_ENABLE_EXCEPTION_HANDLER 및 YII_ENABLE_ERROR_HANDLER를 false로 정의하여 Yii 사용을 비활성화할 수 있습니다. 예외 및 오류 처리 메커니즘.

다음 내용에서는 예외사항과 오류를 통칭하여 오류라고 하며, 필요한 경우 세부적으로 구분합니다. YII_DEBUG 상수(기본값은 false이며 항목 파일에서 설정할 수 있음)는 오류 정보 표시에 매우 중요한 영향을 미칩니다. 디버그 모드에서는 오류 출력이 가장 상세합니다. 프로그램이 실행되면 YII_DEBUG를 false로 수정해야 합니다.

디버그 모드 여부에 관계없이 Yii 프로그램에서 오류가 발생하면 해당 오류 정보가 기록됩니다(오류 수준은 오류, 기본 범주는 응용 프로그램). 차이점은 디버그 모드에서는 자세한 정보가 웹페이지에 직접 표시된다는 점입니다.

CApplication:: handlerError($code,$message,$file,$line)

위 메소드는 관련 로직을 구현합니다. 이 두 함수가 호출되지 않으면 후속 오류 처리 과정에서 예외나 오류가 다시 발생하면 CApplication::handlerError가 다시 호출되어 무한 루프가 발생할 수 있습니다. 따라서 Yii는 일시적으로 CApplication::handleError를 사용하여 후속 오류 및 예외를 처리하는 것을 금지합니다(PHP의 기본 오류 처리 메커니즘 사용). 이를 통해 루프 호출이 발생하지 않도록 합니다.

PHP 오류 처리 오류가 발생하면 PHP는 어떤 정보를 로그에 기록합니까? 오류 코드(예: PHP의 E_ERROR E_WARNING E_STRICT E_DEPRECATED) 메시지 내용(예: 정의되지 않은 vaiable $input) 오류를 생성한 파일 경로 오류를 생성한 줄 번호 추가 추적 역추적 정보(debug_backtrace를 통해 달성됨) 현재 URL

해당 로깅 외에도 Yii는 오류에 대한 후속 처리(예: 실행 중단, 오류 페이지 표시 등)도 수행합니다. 기본적으로 오류 처리는 CErrorHandler 구성 요소에 전달됩니다. onError 이벤트 핸들러를 CApplicaton 2차 처리 인계에 바인딩하여 실현할 수 있으며 여기의 디자인은 매우 유연합니다.

이때 CErrorEvent가 생성되고($code, $message, $file 및 $line과 같은 여러 주요 매개변수 포함) 처리를 위해 CErrorHandler 구성 요소에 전달됩니다. 특히 CErrorHandler::handleError에 의해 처리됩니다. 이 프로세스는 주로 오류 관련 정보를 구성하고 적절한 방식으로 표시하는 것입니다.

디버그 모드인지(YII_DEBUG==true)는 오류 메시지 표시에 큰 영향을 미칩니다. 디버그 모드에서는 자세한 오류 추적 정보를 표시하고, 프로덕션 모드에서는 사용자에게 친숙한 페이지를 표시하려고 합니다. 따라서 여기의 오류 표시는 다르며, 차이점은 아래에 설명되어 있습니다.

디버그 모드에서는 예외 보기가 직접 렌더링되어 오류를 표시합니다. 다음 경로에 따라 검색됩니다:

protected/views/system/Exception.php

YII_PATH/views/Exception.php

분명히 views/system 디렉토리는 기본적으로 애플리케이션에 정의되어 있지 않으므로 시스템 프레임워크가 사용됩니다. 보기 파일과 함께 제공됩니다. 최종 포함 파일은 Yii 프레임워크의 views/Exception.php입니다.

위 분석을 통해 디버깅 모드에서 사용자 정의 예외 페이지를 사용하려면(일반적으로 별 의미가 없을 수 있음) protected/views/system/Exception.php 파일을 구성해야 한다는 것을 알 수 있습니다. 사용할 수 있습니다. 변수는 $data입니다.

비디버깅 모드에서는 다음과 같은 처리가 이루어집니다.

구성 파일의 errorHandler 구성 요소에 errorAction 라우팅 정보가 정의되어 있으면 직접 실행하고, 그렇지 않으면 2단계 프로세스를 실행합니다.

오류 보기를 로드해 보고, 다음 경로에 따라 검색하세요(첫 번째 검색된 파일이 사용됩니다)

protected/views/system/zh_cn/error500.php

protected/views/system/error500.php

보호된 /views/system/zh_cn/error.php

protected/views/system/error.php

YII_PATH/views/zh_cn/error500.php

YII_PATH/views/error500.php

YII_PATH/views/zh_cn/ error .php

Y II_PATH/views/error.php

예외 처리 이전 분석에 따르면 예외 처리 메커니즘은 오류 처리 메커니즘과 유사하며 로그도 기록됩니다. 예외.$EXCEPTIONCLASS". CHttpException 클래스 예외인 경우 범주 이름은 예외.CHttpException.$STATUS_CODE입니다. 예를 들어, 데이터의 예외 분류를 예외.CDbException이라고 합니다.

다음으로, 오류 이벤트 CExceptionEvent는 처리를 위해 errorHandler로 전달됩니다. 모든 오류 정보는 CExceptionEvent 객체에 의해 전달됩니다. 처리 방법은 다음과 같습니다.

디버그 모드인 경우 다음 순서로 뷰 파일을 검색하며, 처음 검색된 파일을 사용합니다

protected/views/system/Exception.php

YII_PATH/views/ 예외.php

비디버깅 모드이고 구성 파일의 errorHandler 구성 요소에 대해 errorAction 속성 경로가 정의되어 있으면 실행하고, 그렇지 않으면 3단계로 이동하세요.

다음 순서로 뷰 파일을 로드해 보면 첫 번째로 검색된 파일이 사용됩니다

protected/views/system/zh_cn/error500.phpprotected/views/system/error500.phpprotected/views/system/zh_cn/error.phpprotected/views/system/error.phpYII_PATH/views/zh_cn/error500.phpYII_PATH/views/error500.phpYII_PATH/views/zh_cn/error.phpY II_PATH/views/error.php

플로우 차트 설명을 사용하면 더 명확해집니다. 뷰 파일을 검색하는 과정은 우리가 어떻게 작업하는지와 관련이 있기 때문에 더 중요합니다. 오류 페이지 세부 정보를 사용자 정의하려면 후속 순서도에서 프로세스를 자세히 설명합니다.

PHP가 Yii 프레임워크에서 오류와 예외를 처리하는 방법을 설명하는 예

그림에서 볼 수 있듯이 가장 쉬운 방법은 errorHandler 구성 요소에 errorAction 속성을 설정하여 오류가 발생하는 경로를 지정하는 것입니다.

PHP가 Yii 프레임워크에서 오류와 예외를 처리하는 방법을 설명하는 예

일반적으로 우리가 가장 우려하는 것은 프로덕션 모드에서 오류 페이지 표시, 위 분석 후 사용 가능한 두 가지 방법이 있습니다:

구성 파일에서 errorHandler 구성 요소에 대한 errorAction 라우팅 속성을 정의합니다(유연한 구성을 달성하려면 이 방법을 먼저 사용해야 함)

정의 사용자 정의 오류 페이지를 구현하려면 다음 파일 중 하나를 사용하세요. php

protected/views/system/error.php

첫 번째 방법은 유연하고 제어 가능한 뷰 파일을 컨트롤러에서 지정할 수 있습니다.

오류 핸들러 사용 예

yiiwebErrorHandler는 errorHandler라는 애플리케이션 컴포넌트로 등록되며, 애플리케이션 구성에서 다음과 같이 구성할 수 있습니다.

return [
'components' => [
'errorHandler' => [
'maxSourceLines' => 20,
],
],
];

위 코드를 사용하면 예외 페이지에 최대 20개의 소스 코드가 표시됩니다.

앞서 언급했듯이 오류 처리기는 치명적이지 않은 모든 PHP 오류를 포착 가능한 예외로 변환합니다. 즉, 다음 코드를 사용하여 PHP 오류를 처리할 수 있습니다.

use Yii;
use yii\base\ErrorException;
try {
10/0;
} catch (ErrorException $e) {
Yii::warning("pision by zero.");
}
// execution continues...

사용자에게 요청이 있음을 알리는 오류 페이지를 표시하려는 경우 유효하지 않거나 처리할 수 없는 경우 yiiwebNotFoundHttpException과 같은 yiiwebHttpException을 발생시키면 됩니다. 오류 처리기는 응답 HTTP 상태 코드를 올바르게 설정하고 적절한 오류 보기 페이지를 사용하여 오류 메시지를 표시합니다.

use yii\web\NotFoundHttpException;
throw new NotFoundHttpException();

맞춤형 오류 표시

yiiwebErrorHandler 오류 핸들러는 YII_DEBUG 상수 값에 따라 오류 표시를 조정합니다(디버그 모드에서 의미). 오류 핸들러는 예외와 자세한 함수 호출 스택 및 소스 코드 줄을 표시합니다. 디버깅 도움말, YII_DEBUG가 false인 경우 애플리케이션의 민감한 정보 유출을 방지하기 위해 오류 메시지만 표시됩니다.

추가됨: 예외가 yiibaseUserException을 상속하는 경우 YII_DEBUG 값에 관계없이 함수 호출 스택 정보가 표시되지 않습니다. 이는 이 오류가 사용자 생성 오류로 간주되어 개발자가 수정할 필요가 없기 때문입니다. .

yiiwebErrorHandler 오류 핸들러는 기본적으로 두 가지 보기를 사용하여 오류를 표시합니다.

@yii/views/errorHandler/error.php: 함수 호출 스택 정보를 포함하지 않는 오류 메시지를 표시하는 데 사용됩니다. YII_DEBUG가 false이면 모든 오류가 표시됩니다. 사용된.

@yii/views/errorHandler/Exception.php: 함수 호출 스택 정보가 포함된 오류 메시지를 표시할 때 사용됩니다.

오류 처리기의 yiiwebErrorHandler::errorView 및 yiiwebErrorHandler::ExceptionView 속성을 구성하여 사용자 정의 오류 표시 보기를 사용할 수 있습니다.

오류 작업 사용

지정된 오류 작업을 사용하여 오류 표시를 사용자 정의하는 것이 더 편리합니다. 이렇게 하려면 먼저 errorHandler 구성 요소의 yiiwebErrorHandler::errorAction 속성을 다음과 유사하게 구성합니다.

return [
'components' => [
'errorHandler' => [
'errorAction' => 'site/error',
],
]
];

yiiwebErrorHandler:: errorAction 속성은 액션으로의 라우팅을 사용합니다. 위 구성은 함수 호출 스택 정보를 표시할 필요가 없는 오류는 사이트/오류 작업을 실행하여 표시된다는 의미입니다.

다음과 같이 사이트/오류 작업을 생성할 수 있습니다.

namespace app\controllers;
use Yii;
use yii\web\Controller;
class SiteController extends Controller
{
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
];
}
}

위 코드는 오류를 표시하기 위해 error라는 뷰를 렌더링하는 yiiwebErrorAction 클래스를 사용하여 오류 작업을 정의합니다.

yiiwebErrorAction을 사용하는 것 외에도 다음과 유사한 작업 방법을 사용하여 오류 작업을 정의할 수 있습니다.

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

이제 이 보기 파일에서 오류가 발생하면 views/site/error.php로 보기 파일을 생성해야 합니다. 작업은 yiiwebErrorAction으로 정의되며 액세스할 수 있습니다. 이 작업에는 다음 변수가 정의됩니다.

name: 오류 이름

message: 오류 메시지

Exception: HTTP 상태 코드, 오류 코드, 오류 호출 스택 등

보충 사항: 기본 애플리케이션 템플릿 또는 고급 애플리케이션 템플릿을 사용하는 경우 오류 작업 및 오류 보기가 이미 정의되어 있습니다.

사용자 정의 오류 형식

오류 처리기는 응답에서 설정한 형식에 따라 오류를 표시합니다. yiiwebResponse::format 응답 형식이 html인 경우 오류 또는 예외 보기를 사용하여 오류 정보를 표시합니다. 이전 섹션. 다른 응답 형식의 경우 오류 처리기는 오류 정보를 yiiwebResponse::data 속성에 배열로 할당한 후 해당 형식으로 변환합니다. 예를 들어 응답 형식이 json인 경우 다음과 같은 응답 정보를 볼 수 있습니다.

HTTP/1.1 404 Not Found
Date: Sun, 02 Mar 2014 05:31:43 GMT
Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8
{
"name": "Not Found Exception",
"message": "The requested resource was not found.",
"code": 0,
"status": 404
}

애플리케이션에서 사용할 수 있습니다. 구성에서 응답 구성요소의 beforeSend 이벤트에 응답하여 오류 응답 형식을 사용자 정의합니다.

return [
// ...
'components' => [
'response' => [
'class' => 'yii\web\Response',
'on beforeSend' => function ($event) {
$response = $event->sender;
if ($response->data !== null) {
$response->data = [
'success' => $response->isSuccessful,
'data' => $response->data,
];
$response->statusCode = 200;
}
},
],
],
];

上述代码会重新格式化错误响应,类似如下:

HTTP/1.1 200 OK
Date: Sun, 02 Mar 2014 05:31:43 GMT
Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8
{
"success": false,
"data": {
"name": "Not Found Exception",
"message": "The requested resource was not found.",
"code": 0,
"status": 404
}
}

推荐学习:php视频教程

위 내용은 PHP가 Yii 프레임워크에서 오류와 예외를 처리하는 방법을 설명하는 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 CSDN에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기