- CakePHP 教程
- CakePHP - 首页
- CakePHP - 概述
- CakePHP - 安装
- CakePHP - 文件夹结构
- CakePHP - 项目配置
- CakePHP - 路由
- CakePHP - 控制器
- CakePHP - 视图
- CakePHP - 扩展视图
- CakePHP - 视图元素
- CakePHP - 视图事件
- CakePHP - 数据库操作
- CakePHP - 查看记录
- CakePHP - 更新记录
- CakePHP - 删除记录
- CakePHP - 服务
- CakePHP - 错误与异常处理
- CakePHP - 日志记录
- CakePHP - 表单处理
- CakePHP - 国际化
- CakePHP - 会话管理
- CakePHP - Cookie 管理
- CakePHP - 安全性
- CakePHP - 验证
- CakePHP - 创建验证器
- CakePHP - 分页
- CakePHP - 日期和时间
- CakePHP - 文件上传
- CakePHP 有用资源
- CakePHP - 快速指南
- CakePHP - 有用资源
- CakePHP - 讨论
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 | 遇到致命错误时,设置为增加内存限制的兆字节数。这允许有足够的余地来完成日志记录或错误处理。 |
示例
按照以下代码所示修改**config/routes.php**文件。
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();
});
在**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.php 的**View**文件。将以下代码复制到该文件中。
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/>
通过访问以下 URL 来执行上述示例。
https:///cakephp4/exception/5/0
输出
执行后,您将收到以下输出。