本章主要讲解了TP5/TP6异同之处,基础的控制器层、模型层的使用,杜绝无效请求让代码更加健壮,数据库层问题排查解决方案,这些内容都是为后续电商实战做完美铺垫。
tp5的框架目录在thinkphp,而tp6的框架项目在vendor下,所以tp6就只能用composer 的方式进行安装;
tp5支持composer安装和官网下载源码安装包,而tp6只支持composer的方式进行安装
tp6使用composer机制的加载方式来实现类的自动加载,tp5是自己实现了一套类的加载机制再结合composer进行加载
PHP PSR标准规范 https://learnku.com/docs/psr/basic-coding-standard/1605
组件独立
orm
模板引擎
中间件改进
tp6开始使用管道模式来实现中间件,比起之前的版本更加简洁、有序
输出使用return即可
输出json内容可以直接使用tp6提供的json方法
可追踪request对象的产生过程
BaseController中的__construct()
vendor/topthink/framework/src/think/App.php集成的父类container容器类
容器类中的__get()方法
get()方法创建出对象实例
获取单个数据值同时进行类型转换
$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()方法即可
在common.php文件中封装show方法来返回通用格式的API数据
抽离状态码形成对应关系
在config中建立status.php配置文件返回各种状态码
注: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();
}
请参考手册:https://www.kancloud.cn/manual/thinkphp6_0/1037532
CURD操作以及链式操作,在这里不做过多介绍
第一种:链式查询中嵌入: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