CakePHP - Xử lý lỗi & ngoại lệ

Sự cố của hệ thống cần được xử lý hiệu quả để hệ thống hoạt động trơn tru. CakePHP đi kèm với bẫy lỗi mặc định, lỗi in và ghi nhật ký khi chúng xảy ra. Trình xử lý lỗi tương tự này được sử dụng để bắtExceptions.

Trình xử lý lỗi hiển thị lỗi, khi gỡ lỗi là đúng và lỗi ghi nhật ký, khi gỡ lỗi là sai. CakePHP có một số lớp ngoại lệ và xử lý ngoại lệ được tích hợp sẵn sẽ nắm bắt bất kỳ ngoại lệ nào chưa được cấp và hiển thị một trang hữu ích.

Lỗi và cấu hình ngoại lệ

Lỗi và ngoại lệ có thể được định cấu hình trong tệp config\app.php. Xử lý lỗi chấp nhận một số tùy chọn cho phép bạn điều chỉnh việc xử lý lỗi cho ứng dụng của mình -

Lựa chọn Loại dữ liệu Sự miêu tả
errorLevel int

Mức độ sai sót mà bạn muốn nắm bắt. Sử dụng hằng số lỗi php và mặt nạ bit tích hợp để chọn mức độ lỗi mà bạn quan tâm.

dấu vết bool

Bao gồm dấu vết ngăn xếp cho các lỗi trong tệp nhật ký. Dấu vết ngăn xếp sẽ được đưa vào nhật ký sau mỗi lỗi. Điều này rất hữu ích cho việc tìm ra vị trí / khi nào các lỗi đang được phát sinh.

ngoại lệ chuỗi

Lớp chịu trách nhiệm hiển thị các ngoại lệ chưa được ghi nhận. Nếu bạn chọn mộtcustom lớp, bạn nên đặt tệp cho lớp đó trong src/Error. Lớp này cần triển khairender() phương pháp.

khúc gỗ bool

Khi đúng, các ngoại lệ + dấu vết ngăn xếp của chúng sẽ được ghi vào Cake\Log\Log.

bỏ qua mảng

Một mảng các tên lớp ngoại lệ không được ghi lại. Điều này rất hữu ích để loại bỏNotFoundExceptions hoặc các thông báo nhật ký phổ biến, nhưng không thú vị khác.

extraFatalErrorMemory int

Đặt thành số megabyte để tăng giới hạn bộ nhớ khi gặp lỗi nghiêm trọng. Điều này cho phép phòng thở hoàn thành việc ghi nhật ký hoặc xử lý lỗi.

Thí dụ

Thực hiện các thay đổi trong config/routes.php tệp như được hiển thị trong mã sau.

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();
});

Tạo nên ExpsController.php nộp tại src/Controller/ExpsController.php. Sao chép mã sau vào tệp bộ điều khiển.

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();
         }
      }
   }
?>

Tạo một thư mục Exps tại src/Template và trong thư mục đó tạo một Viewtệp có tên là index.php. Sao chép mã sau vào tệp đó.

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/>

Thực hiện ví dụ trên bằng cách truy cập URL sau.

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

Đầu ra

Sau khi thực hiện, bạn sẽ nhận được kết quả sau.