TP6基础知识【新框架】

导读

本章主要讲解了TP5/TP6异同之处,基础的控制器层、模型层的使用,杜绝无效请求让代码更加健壮,数据库层问题排查解决方案,这些内容都是为后续电商实战做完美铺垫。

TP5和TP6的异同之处

  • 目录结构异同
tp5的框架目录在thinkphp,而tp6的框架项目在vendor下,所以tp6就只能用composer 的方式进行安装;
  • 安装方式异同
tp5支持composer安装和官网下载源码安装包,而tp6只支持composer的方式进行安装
  • 类自动加载方式不同
tp6使用composer机制的加载方式来实现类的自动加载,tp5是自己实现了一套类的加载机制再结合composer进行加载
  • 严格模式

TP6基础知识【新框架】_第1张图片

  • 支持更多的PSR规范
PHP PSR标准规范 https://learnku.com/docs/psr/basic-coding-standard/1605
  • 组件独立

    • orm

    • 模板引擎

  • 中间件改进

tp6开始使用管道模式来实现中间件,比起之前的版本更加简洁、有序
  • 引入filesystem组件

控制器巧用

  • 输出使用return即可

  • 输出json内容可以直接使用tp6提供的json方法

TP6基础知识【新框架】_第2张图片

  • 控制器request属性绑定request对象
可追踪request对象的产生过程
BaseController中的__construct()
vendor/topthink/framework/src/think/App.php集成的父类container容器类
容器类中的__get()方法
get()方法创建出对象实例

TP6基础知识【新框架】_第3张图片
TP6基础知识【新框架】_第4张图片

  • TP6的参数获取方式
获取单个数据值同时进行类型转换

$this->request->param('abc',1,'intval')

使用依赖注入的形式

public function index(Request $request){
    return $request->param('abc');
}

使用助手函数

input('abc');

使用框架提供的request()方法

request()->param('abc');

门面模式静态调用

use think\facade\Request;

public function index(){
    return Request::param('abc');
}
  • 杜绝无效请求
开启TP的开发调试模式

在.env文件中配置APP_DEBUG = true

若访问方法不存在,可在BaseController中添加魔术方法__call()

public function __call($name,$arguments){
    // 是APi请求 => JSON
    
    // 是模板引擎请求 => 页面
}

若访问的控制器不存在,可建立一个Error控制器

注意:名字是固定的

同样是增加__call()方法即可
  • 通用化API数据格式数据
在common.php文件中封装show方法来返回通用格式的API数据

TP6基础知识【新框架】_第5张图片

抽离状态码形成对应关系

在config中建立status.php配置文件返回各种状态码

TP6基础知识【新框架】_第6张图片


框架操作数据库

  • db库认知基础
注:orm独立出来了,与tp5不同
配置数据库:

通过env文件来具体配置,目的是不同的环境下,如线上服务器的配置只需要使用本环境的env文件就可以直接更改配置了

使用db:

① tp5中使用DB方法直接use think/Db即可,tp6中必须使用门面才能使用

use think\facade\Db;

public function hello()
{
    $result =  Db::table("user")->where("id",10)->find();
    
    dump($result);
}

② 通过容器app()来获取,tp6有,tp5没有

public function hello()
{
    app('db')->table("user")->where("id", 10)->find();
}
  • db查询方式讲解
请参考手册:https://www.kancloud.cn/manual/thinkphp6_0/1037532

CURD操作以及链式操作,在这里不做过多介绍
  • 非常实用的SQL问题排查方案
第一种:链式查询中嵌入:fetchsql()

第二种:echo Db::getLastSql(); 
  • 模型初始
关于模型操作参考手册:

https://www.kancloud.cn/manual/thinkphp6_0/1037579

此处不做过多介绍
  • 模型查询其他使用
模型查询返回的是对象,可以toArray()方法转换为数组

同时要注意:因为是对象所以可以->调用,也可以像数组一样访问我们的对象

模型获取器的场景包括:

    - 时间日期字段的格式化输出;
    
    - 集合或枚举类型的输出;
    
    - 数字状态字段的输出;
    
    - 组合字段的输出;

例如,我们需要对状态值进行转换,可以使用:

'删除',0=>'禁用',1=>'正常',2=>'待审核'];
        return $status[$value];
    }
}
数据表的字段会自动转换为驼峰法,一般status字段的值采用数值类型,我们可以通过获取器定义,自动转换为字符串描述。

$user = User::find(1);
echo $user->status; // 例如输出“正常”

关于获取器的使用详见:

https://www.kancloud.cn/manual/thinkphp6_0/1037588

你可能感兴趣的:(PHP,thinkphp6)