0

0

0

修罗

站点介绍

只有了解事实才能获得真正的自由

tp6.0开发初始化

修罗 2020-12-12 1944 0条评论 thinkphp5.1

首页 / 正文

tp6.0开发初始化

安装tp6:https://www.kancloud.cn/manual/thinkphp6_0/1037481

一、配置

1、开启调试

1607705256796.png

2、强制路由

1607705410427.png

3、数据库

1607705346207.png

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

1607706004618.png

// 抛出异常
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);
}

控制器里使用公共方法

1607706065250.png

三、自定义异常

1607706442216.png

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);

控制器抛出异常

1607706395027.png

结果

1607706878806.png

四、自动实例化模型

我们将模型实例保存在$M变量中,继承Base的控制器通过$this->M拿到模型实例。

若不想自动实例化模型,继承Base的控制器配置$autoNewModel = false即可。

  • 控制器和模型需要子目录相同:比如控制器controller\v1模型model\v1
  • 模型名和控制器名一样

1607710120986.png

<?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

1607710601517.png

结果

1607710619305.png

五、验证器自动化验证

验证器: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添加

1607712779726.png

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、验证器

1607713038291.png

2、控制器

1607713115492.png

3、路由

1607713399593.png

4、请求

1607713491022.png

评论(0)


最新评论

  • 1

    1

  • 1

    1

  • -1' OR 2+158-158-1=0+0+0+1 or 'TKCTZnRa'='

    1

  • 1

    1

  • 1

    1

  • 1

    1

  • 1

    1

  • @@5Qa2D

    1

  • 1

    1

  • 1

    1

日历

2025年09月

 123456
78910111213
14151617181920
21222324252627
282930    

文章目录

推荐关键字: Linux webpack js 算法 MongoDB laravel JAVA jquery javase redis