CakePHP-오류 및 예외 처리

시스템의 원활한 운영을 위해 시스템 장애를 효과적으로 처리해야합니다. CakePHP는 오류가 발생할 때이를 인쇄하고 기록하는 기본 오류 트래핑과 함께 제공됩니다. 이 동일한 오류 처리기가Exceptions.

오류 처리기는 debug가 true이면 오류를 표시하고 debug가 false이면 오류를 기록합니다. CakePHP에는 많은 예외 클래스가 있으며 내장 된 예외 처리는 잡히지 않은 예외를 캡처하고 유용한 페이지를 렌더링합니다.

오류 및 예외 구성

오류 및 예외는 파일에서 구성 할 수 있습니다. config\app.php. 오류 처리는 응용 프로그램에 맞게 오류 처리를 조정할 수있는 몇 가지 옵션을 허용합니다.

선택권 데이터 형식 기술
errorLevel int

캡처하려는 오류 수준입니다. 내장 된 PHP 오류 상수와 비트 마스크를 사용하여 관심있는 오류 수준을 선택합니다.

자취 부울

로그 파일에 오류에 대한 스택 추적을 포함합니다. 스택 추적은 각 오류 후 로그에 포함됩니다. 이는 오류가 발생하는 위치 /시기를 찾는 데 유용합니다.

exceptionRenderer

포착되지 않은 예외를 렌더링하는 클래스입니다. 당신이 선택하면custom 클래스의 경우 해당 클래스에 대한 파일을 src/Error. 이 클래스는render() 방법.

로그 부울

true이면 예외 + 해당 스택 추적이 기록됩니다. Cake\Log\Log.

skipLog 정렬

기록되지 않아야하는 예외 클래스 이름의 배열입니다. 제거하는 데 유용합니다.NotFoundExceptions 또는 기타 일반적이지만 흥미롭지 않은 로그 메시지.

extraFatalErrorMemory int

치명적인 오류가 발생할 때 메모리 제한을 늘릴 MB 수로 설정합니다. 이를 통해 호흡 공간이 로깅 또는 오류 처리를 완료 할 수 있습니다.

변경 config/routes.php 다음 코드와 같이 파일.

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf');
   //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('/exception/:arg1/:arg2',
      ['controller'=>'Exps','action'=>'index'],
      ['pass' => ['arg1', 'arg2']]);
   $builder->fallbacks();
});

창조하다 ExpsController.php 파일 src/Controller/ExpsController.php. 컨트롤러 파일에 다음 코드를 복사합니다.

src/Controller/ExpsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   use Cake\Core\Exception\Exception;
   class ExpsController extends AppController {
      public function index($arg1,$arg2) {
         try{
            $this->set('argument1',$arg1);
            $this->set('argument2',$arg2);
            if(($arg1 > 1 || $arg1 > 10) || ($arg2 < 1 || $arg2 > 10))
               throw new Exception("One of the number is out of range [1-10].");
         } catch(\Exception $ex){
            echo $ex->getMessage();
         }
      }
   }
?>

디렉토리 생성 Exps ...에서 src/Template 그 디렉토리 아래에 Viewindex.php라는 파일. 해당 파일에 다음 코드를 복사하십시오.

src/Template/Exps/index.php

This is CakePHP tutorial and this is an example of Passed arguments.
Argument-1: <?=$argument1?><br/> Argument-2: <?=$argument2?><br/>

다음 URL을 방문하여 위의 예를 실행하십시오.

http : // localhost / cakephp4 / exception / 5 / 0

산출

실행하면 다음 출력이 표시됩니다.