tp6.0开发初始化
安装tp6:https://www.kancloud.cn/manual/thinkphp6_0/1037481
一、配置
1、开启调试

2、强制路由

3、数据库

二、定义公共返回数据方法

// 抛出异常
function ApiException($msg = '请求错误', $errorCode = 20000, $statusCode = 404){
// 框架提供抛出异常的助手函数
abort($errorCode, $msg, ['statusCode' => $statusCode]);
}
// 成功返回
function showResCode($data = '',$msg = 'ok',$code = 200){
return json(['msg' => $msg, 'data' => $data],$code);
}
// 返回不带数据
function showResWithoutCode($msg = '', $code = 200){
return showResCode([], $msg, $code);
}控制器里使用公共方法

三、自定义异常

if (env('APP_DEBUG')) {
// 其他错误交给系统处理
return parent::render($request, $e);
}
$headers = $e->getHeaders();
return json([
'msg' => $e->getMessage(),
'errorCode' => $e->getStatusCode()
],array_key_exists('statusCode',$headers)
// 响应码404
? $headers['statusCode'] : 404);控制器抛出异常

结果

四、自动实例化模型
我们将模型实例保存在$M变量中,继承Base的控制器通过$this->M拿到模型实例。
若不想自动实例化模型,继承Base的控制器配置$autoNewModel = false即可。
- 控制器和模型需要子目录相同:比如控制器
controller\v1模型model\v1 - 模型名和控制器名一样

<?php
namespace app;
use app\BaseController;
class Base extends BaseController{
// 是否自动实例化当前模型
protected $autoNewModel = true;
// 自定义实例化模型路径
protected $ModelPath = null;
// 保存当前模型实例
protected $M = null;
public function __construct(Request $request){
// 初始化控制器相关信息
$this->initControllerInfo($request);
// 实例化当前模型
$this->getCurrentModel();
// 当前控制器信息
protected $Cinfo = [];
}
// 初始化控制器相关信息
public function initControllerInfo($request){
// $str = 'v1.Index'
$str = $request->controller();
// 获取真实控制器名称
$this->Cinfo = [
// 助手函数:获取类名(不包含命名空间)
'Cname' => class_basename($this),
'Cpath' => str_replace('.','\\',$str),
// 当前方法
'action' => $request->action()
];
/**
* "Cname" => "User"
* "Cpath" => "v1\User"
* "action" => "index"
*/
}
// 获取当前模型实例
public function getCurrentModel(){
if (!$this->M && $this->autoNewModel) {
$model = $this->ModelPath ?? $this->Cinfo['Cpath'];
$this->M = app('app\model\\'.$model);
}
}
}继承base

结果

五、验证器自动化验证
验证器:https://www.kancloud.cn/manual/thinkphp6_0/1037624
php think make:validate v1/Index- $autoValidateCheck = true;是否开启自动验证
- $excludeValidateCheck = [];不需要验证的方法
- protected $autoValidateScenes = []; 验证场景配置; [方法名=>场景名] ,若没有配置,默认scene为方法名。
注意:
- 验证器、控制器和模型需要子目录相同:比如控制器
controller\v1模型model\v1验证器validate\v1 - 验证器、模型名和控制器名一样
- 因为我们通过$request->controller();(得到的结果例如:v1.Index)拿到控制器名,同时以此名字作为模型名和验证器名。
base添加

1、成员变量
// 是否开启自动验证
protected $autoValidateCheck = true;
// 不需要验证的方法
protected $excludeValidateCheck = [];
// 验证场景配置
protected $autoValidateScenes = [];2、构造添加
// 自动验证
$this->autoValidateAction();3、成员方法
// 自动化验证
public function autoValidateAction(){
// app地址
define('__APP_PATH__',__DIR__.'\\');
// 当前方法
$action = $this->Cinfo['action'];
// 判断是否需要验证,不在排除方法中
if ($this->autoValidateCheck && !in_array($action,$this->excludeValidateCheck)) {
// 获取验证实例
$validateName = file_exists(__APP_PATH__.'validate/'.$this->Cinfo['Cpath'].'.php') ? $this->Cinfo['Cpath'] : $this->Cinfo['Cname'];
$validate = app('app\validate\\'.$validateName);
// 获取验证场景
$scene = $action;
// autoValidateScenes = [Index => scene] 方法名 => 场景名
if (array_key_exists($action,$this->autoValidateScenes)) {
$scene = $this->autoValidateScenes[$action];
}
// 没有配置autoValidateScenes,默认scene为方法名
// 开始验证
$params = request()->param();
if (!$validate->scene($scene)->check($params)) {
// 抛出异常
ApiException($validate->getError());
}
}
}使用
1、验证器

2、控制器

3、路由

4、请求

Ценники на вывоз мусора сейчас космос, любые лайфхаки по экономии в тему.
1xbet onlayn kazino platforması ilə vaxtınızı daha səmərəli və maraqlı keçirin. Saytın canlı kazino bölməsi istifadəçilərə fərqli bir dünya təklif edir. Burada canlı dilerli kazino oyunlarının hər bir növünü sınaqdan keçirə bilərsiniz. Krupyelərin peşəkarlığı oyunun dinamikasını və marağını artırır. Müntəzəm olaraq yenilənən oyun siyahısı cansıxıcılığa yol vermir. Hesabınızı artırmaq üçün onlarla fərqli və etibarlı üsul mövcuddur. Qazanılan pullar cəmi bir neçə dəqiqə ərzində şəxsi hesabınıza köçürülür. Aktiv fəaliyyətinizə görə fərdi bonuslar və hədiyyələr qazana bilərsiniz. Dəstək xidməti həm çat, həm də e-poçt vasitəsilə kömək göstərir. 1xbet ailəsinə qoşulun və böyük uduşlar üçün ilk addımı atın. onlayn kazino
我一直梦想, 看到你们相册那样的地方。真棒。
我喜欢, 这里分享真实经验。你的项目 就是 属于这里的。请继续。
我热爱这样的想法, 去那么多国家。真的很鼓舞。
能感受到热爱。继续保持 感受。
我关注这样的资源, 写得很实在。你的网站 就是 属于这里的。加油。
1
1
1