### **安装TP6**
~~~
composer create-project topthink/think tp && cd tp
~~~
开启TP6多应用模式
~~~
composer require topthink/think-multi-app
~~~
安装thinkphp模板引擎
~~~
composer require topthink/think-view
~~~
安装验证码扩展
~~~
composer require topthink/think-captcha
~~~
### **自定义全局异常处理类**
在\\extend目录下新建扩展exception,自定义ExceptionHandler继承TP的think\\exception\\Handle类,在ExceptionHandler类中重写render方法
~~~
public function render($request, Throwable $e): Response {
if ($e instanceof BaseException) {
// 自定义异常走的逻辑
$this->code = $e->getCode();
$this->message = $e->getMessage();
$this->errorCode = $e->getErrorCode();
} else {
// 服务器异常逻辑,不需要将具体错误信息展示给用户
$this -> code = 500;
$this -> message = '服务器内部错误';
$this -> errorCode = 999;
// 此处要记录日志,留待之后添加
}
$result = [
'message' => $this->message,
'errorCode' => $this->errorCode,
'request_url' => Request::url(),
];
return json($result, $this->code);
}
~~~
使自定义全局异常生效:
app目录下的provider.php中定义容器:
~~~
'think\exception\Handle' => \exception\ExceptionHandler::class,
~~~
定义BaseException继承think\\Exception,定义存储错误信息的成员变量
~~~
// HTTP 状态码
protected $code = 400;
// 错误具体信息
protected $message = '参数错误';
// 自定义错误码
protected $errorCode = 10000;
~~~
重写\_\_construct()方法,让自定义异常处理类接收一个数组参数
~~~
public function __construct($params = []) {
if (!is_array($params)){
throw new Exception('参数必须是数组');
}
if (array_key_exists('code',$params)){
$this -> code = $params['code'];
}
if (array_key_exists('message',$params)){
$this -> message = $params['message'];
}
if (array_key_exists('errorCode',$params)){
$this -> errorCode = $params['errorCode'];
}
}
~~~
### **构建验证层**
在validate目录下定义BaseValidate继承think\\Validate,实现gocheck方法
~~~
public function goCheck(){
$params = Request::param();
$result = $this -> check($params);
if (!$result){
throw new \exception\ParamsException([
'message'=> $this -> error,
'code' => 400
]);
}else{
return true;
}
}
~~~
其他的validate文件继承BaseValidate,如LoginCheck继承BaseValidate
在控制器里就可以通过 (newLoginCheck()) ->goCheck(); 实现参数校验
校验不通过则抛出自定义异常
- 空白目录
- 使用thinkphp6搭建后端api接口流程
- tp6 uniapp vue 前后端跨域解决方案
- 操作记录
- api00
- 你看看有没有用
- 6666
- Docker安装LNMP环境的详细过程(可部署TP项目)
- LNMP部署thinkphp
- 玩客云Armbian 安装LNMP环境 Docker
- ThinkPHP6项目基操(16.实战部分 redis+token登录)
- ThinkPHP6项目基操(11.实战部分 部署后台静态页面模板及后台登录页面)
- ThinkPHP6项目基操(13.实战部分 项目中的自定义异常处理总结 错误页面API错误)
- ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)
- ThinkPHP6项目基操(12.实战部分 验证码)
- ThinkPHP6项目基操(18.实战部分 表单令牌Token 防CSRF)
- ThinkPHP6项目基操(19.实战部分 Mysql模型事务操作)
- ThinkPHP6项目基操(20.实战部分 数据库操作返回值总结)
- 浏览器端判断当前设备的运行环境
- api
- api异常捕捉
- 写一个中间件
- 统一的参数返回形式
- ThinkPHP6调用模型的方法
- thinkphp6控制器、验证器、模型、service,各层写的内容