CakePHP的错误和异常处理
为使系统平稳的运行,系统一旦出现故障就必须被有效的处理掉。CakePHP默认附带错误捕获功能,当错误发生的时候,就会打印并记录这些错误。这个错误捕获程序也被用来捕获异常,当debug为true的时候显示错误,当debug为false的时候记录错误。CakePHP拥有数量庞大的异常类和内置的异常处理程序,会捕获任何异常并显示一个带有有用信息的页面。
错误和异常配置
错误和异常可以在config\app.php文件中进行配置。以下选项可以让让您定制应用程序的错误处理程序-
选项 | 数据类型 | 描述 |
---|---|---|
errorLevel | int | 要捕获的错误级别。 使用内置的PHP错误常量和位掩码来选择你要捕获的错误的级别。 |
trace | bool | 是否在日志文件中为错误包含堆栈跟踪。 堆栈跟踪将包含在日志中的每个错误后,有助于查找错误在何时何处发生。 |
exceptionRenderer | string | 该类负责呈现未捕获的异常。 如果您选择自定义类,你应该把该类的文件放到src/Error目录下。这个类需要实现一个render()方法。 |
log | bool | 如果为true,异常+它们的堆栈跟踪将被记录到Cake\Log\Log文件中 。 |
skipLog | array | 一个存储不需要记录的异常类名的数组。 对过滤NotFoundExceptions或其他常见的,但不感兴趣的日志非常有用。 |
extraFatalErrorMemory | int | 为致命错误发生时设置一个值(MB)来增加内存。以保证可以完成日志记录或错误处理。 |
例
修改config/routes.php文件如下。
config/routes.php文件
<?php use CakeCorePlugin; use CakeRoutingRouteBuilder; use CakeRoutingRouter; 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文件。复制以下代码代码至其中。
src/Controller/ExpsController.php
<?php namespace AppController; use AppControllerAppController; use CakeCoreExceptionException; 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目录,并在此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
输出
执行以上程序,您会看到如下页面。