[TOC]
### 抛出异常
> Lying能捕获全局的错误/异常,如果你的代码抛出了异常并且没有手动捕获,Lying将会捕获它们并且做相应处理。
在程序中手动抛出异常:
~~~php
throw new \lying\exception\HttpException('我的异常', 400); //httpCode被设置为400
throw new \Exception('我的异常'); //httpCode被设置为500
~~~
* 如果抛出的异常类继承自`\lying\exception\HttpException`,那么http返回码会被设置成异常的错误码;
* 如果抛出的异常类不是继承自`\lying\exception\HttpException`,那么http返回码会被设置成`500`;
### 默认异常处理
当你没有手动注册异常处理程序时,默认会这样处理:
* debug配置为true时,显示 ![exception](https://box.kancloud.cn/de7688d922728a10908405ee7b49f212_685x246.png)
* debug配置为false时,只显示`An internal server error occurred.`
### 自定义异常处理
> Lying的异常/错误其实是一个全局事件,你完全可以注册事件来替代Lying默认的错误处理
事件处理程序接受一个时间参数`$event`,是`lying\event\ExceptionEvent`的实例,所以可以这样来获取异常:
~~~php
function handle($event) {
$exception = $event->e;
}
~~~
#### 在配置文件注册错误处理
~~~php
//全局事件
'hook' => [
'events' => [
['frameworkError', function ($event) {
//这里设置你的错误处理程序,例如:
Lying::$maker->dispatch->run('error/error/handle', ['event'=>$event]); //执行error模块,ErrorCtrl控制器,handle方法
return false; //返回false之后,队列后面的事件就不再处理
}], //注册自定义全局错误处理
],
],
~~~
或者这样
~~~php
'hook' => [
'events' => [
['frameworkError', ['ErrorHandle', 'run']], //注册自定义全局错误处理,执行`ErrorHandle`类的静态方法`run`
],
],
~~~
> 配置文件注册的错误处理事件是全局的
#### 在程序中注册错误处理
假设某个控制器需要特殊的错误处理,那么除了注册全局错误处理,也可以这样:
~~~php
<?php
namespace module\index\controller;
use lying\service\Controller;
/**
* Class IndexCtrl
* @package module\index\controller
*/
class IndexCtrl extends Controller
{
public function init()
{
parent::init();
\Lying::$maker->hook->on(\Lying::EVENT_FRAMEWORK_ERROR, function ($event) {
$exception = $event->e; //获取抛出的异常
\Lying::$maker->response()->setContent('出错了')->send(); //显示错误信息
return false; //事件队列后面的事件不再执行
}, null, false); //注册到事件队列最前面
}
/**
* 首页
* @return string
*/
public function index()
{
return $this->render();
}
}
~~~
- 序言
- 更新日志
- 安装
- 规范
- 常量
- 配置
- 自动加载
- MVC
- 模块
- 控制器
- 模型
- 视图
- php原生模板
- 模板引擎
- 变量输出
- 模板注释
- 模板继承
- 模板引用
- 流程控制
- 原样输出
- 服务组件
- Hook组件
- Request组件
- Router组件
- Cookie组件
- Encrypter组件
- Dispatch组件
- Response组件
- View组件
- Session组件
- Helper组件
- 数据分页
- 数据验证
- Logger组件
- Cache组件
- Redis组件
- Connection组件
- 执行sql语句
- 查询生成器
- 查询方法详解
- Schema
- Captcha组件
- CLI
- CLI工具
- 事件
- 类事件
- 实例事件
- 全局事件
- 助手函数
- 扩展
- 异常
- 部署
- Apache
- Nginx
- IIS
- 虚拟主机