CakePHP - Penanganan Error & Exception

Kegagalan sistem perlu ditangani secara efektif untuk kelancaran sistem. CakePHP hadir dengan perangkap kesalahan default, yang mencetak dan mencatat kesalahan saat terjadi. Penangan kesalahan yang sama ini digunakan untuk menangkapExceptions.

Penangan kesalahan menampilkan kesalahan, ketika debug benar dan mencatat kesalahan, ketika debug salah. CakePHP memiliki sejumlah kelas pengecualian dan penanganan pengecualian bawaan akan menangkap semua pengecualian yang tidak tertangkap dan membuat halaman yang berguna.

Kesalahan dan Konfigurasi Pengecualian

Kesalahan dan Pengecualian dapat dikonfigurasi dalam file config\app.php. Penanganan kesalahan menerima beberapa opsi yang memungkinkan Anda menyesuaikan penanganan kesalahan untuk aplikasi Anda -

Pilihan Tipe data Deskripsi
errorLevel int

Tingkat kesalahan yang ingin Anda tangkap. Gunakan konstanta kesalahan php built-in, dan bitmask untuk memilih tingkat kesalahan yang Anda inginkan.

jejak bool

Sertakan jejak tumpukan untuk kesalahan dalam file log. Jejak tumpukan akan disertakan dalam log setelah setiap kesalahan. Ini berguna untuk menemukan di mana / kapan kesalahan muncul.

exceptionRenderer tali

Kelas yang bertanggung jawab untuk memberikan pengecualian yang tidak tertangkap. Jika Anda memilih filecustom kelas, Anda harus menempatkan file untuk kelas itu di src/Error. Kelas ini perlu mengimplementasikanrender() metode.

catatan bool

Jika benar, pengecualian + pelacakan tumpukannya akan dicatat dalam log Cake\Log\Log.

skipLog Himpunan

Larik nama kelas pengecualian yang tidak boleh dicatat. Ini berguna untuk menghapusNotFoundExceptions atau pesan log umum lainnya, tetapi tidak menarik.

extraFatalErrorMemory int

Setel ke jumlah megabyte untuk menambah batas memori, saat terjadi kesalahan fatal. Hal ini memungkinkan ruang bernapas untuk menyelesaikan pencatatan atau penanganan kesalahan.

Contoh

Lakukan perubahan di config/routes.php file seperti yang ditunjukkan pada kode berikut.

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

Membuat ExpsController.php mengajukan di src/Controller/ExpsController.php. Salin kode berikut di file pengontrol.

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

Buat direktori Exps di src/Template dan di bawah direktori itu buat a Viewfile bernama index.php. Salin kode berikut di file itu.

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

Jalankan contoh di atas dengan mengunjungi URL berikut.

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

Keluaran

Setelah dieksekusi, Anda akan menerima keluaran berikut.