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.