CakePHP - 错误和异常处理

系统故障需要有效处理才能顺利运行系统. CakePHP带有默认错误捕获,可以在出现错误时打印并记录错误.此错误处理程序用于捕获异常.当debug为true时,错误处理程序显示错误,当debug为false时,错误处理程序记录错CakePHP有许多异常类,内置的异常处理将捕获任何未捕获的异常并呈现一个有用的页面.

错误和异常配置

错误和异常可以在文件 config\app.php 中配置.错误处理接受一些选项,允许您为您的应用程序定制错误处理 :

选项数据类型描述
errorLevelint您有兴趣捕获的错误级别.使用内置的php错误常量和位掩码来选择您感兴趣的错误级别.
tracebool包含日志文件中错误的堆栈跟踪.每次出错后,堆栈跟踪都将包含在日志中.这有助于找到错误发生的位置/时间.
exceptionRendererstring负责呈现未捕获异常的类.如果您选择自定义类,则应将该类的文件放在 src/Error 中.这个类需要实现一个 render()方法.
logbool当为true时,异常+其堆栈跟踪将记录到 Cake \Log\Log .
skipLogarray一组异常类名不应该记录.这对于删除 NotFoundExceptions 或其他常见但无趣的日志消息很有用.
extraFatalErrorMemoryint设置为遇到致命错误时增加内存限制的兆字节数.这允许喘息空间来完成记录或错误处理.

示例

config/routes.php 文件中进行更改,如下面的代码所示.

config/routes.php

<?php
   use Cake\Core\Plugin;
   use Cake\Routing\RouteBuilder;
   use Cake\Routing\Router;

   Router::defaultRouteClass('DashedRoute');
   Router::scope('/', function (RouteBuilder $routes) {
      $routes->connect('/exception/:arg1/:arg2',[
         'controller'=>'Exps','action'=>'index'],['pass' => ['arg1', 'arg2']]);
      $routes->fallbacks('DashedRoute');
   });
   Plugin::routes();

src/Controller/ExpsController.php 创建 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();
         }
      }
   }
?>

src/Template 创建目录 Exps 并在该目录下创建视图文件名为 index.ctp .将以下代码复制到该文件中.

src/Template/Exps/index.ctp

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

访问以下网址执行上述示例.

http://localhost:85/CakePHP/exception/5/0

输出

执行后,您将收到以下输出.

异常