異常分類

屏幕快照 2017-05-08 下午2.58.50.png
異常是按照層級處理的,如何a調(diào)用b,在b中發(fā)生異常,正常流程是b會把異常拋給a,a如果也有try捕獲異常操作,便會在a中處理。下面基于RestFul API 給客戶端返回正常的錯誤碼格式來粗略講解異常處理機制。
- 控制器文件:
<?php
/**
* Created by PhpStorm.
* User: chenzhitao
* Date: 2017/5/7
* Time: 下午1:49
*/
namespace app\api\controller\v1;
use app\api\validate\IDMustBePositiveInt;
use think\Exception;
use think\Validate;
use app\api\model\Banner as BannerModel;
class Banner
{
public function getBanner($id){
(new IDMustBePositiveInt())->goCheck();
try{
$banner = BannerModel::getBannerByID($id);
}catch (Exception $e){
$error = [
'error_code'=>10001,
'msg'=>$e->getMessage(),
];
return json($error,400);
}
return $banner;
}
}
- model文件,自制1/0異常,發(fā)現(xiàn)并拋出異常
<?php
/**
* Created by PhpStorm.
* User: chenzhitao
* Date: 2017/5/8
* Time: 下午2:15
*/
namespace app\api\model;
use think\Exception;
class Banner
{
public static function getBannerByID($id){
//TODO:根據(jù)banner ID號,獲取Banner信息
try{
1 / 0;
}catch (Exception $e){
//TODO 記錄日志
throw $e;
}
return 'this is banner';
}
}
- 客戶端返回結(jié)果
{"error_code":10001,"msg":"Division by zero"}