前言
可能很多人都会苦恼,ThinkPHP5项目升级到ThinkPHP6项目怎么那么麻烦,不是只升级了一个版本吗?不用担心,您只需要跟着我下面的内容,一步一步来,就会避开很多坑!
模型
指定数据表名称
建议在模型中添加以下语句
// 自定义对应的数据库中数据表名称
protected $table = "news_category";
过滤非数据表字段
$model->allowField(true) // 过滤非数据表字段
改为
$model->save($data);
已经没那个方法了,会默认处理
修改器
如果在参数中不存在指定字段,也必须添加key
$data["uid"] = null;
$model->save($data);
部分函数必须指定返回值类型
public function getModelName() {
return $this->name;
}
改为
public function getModelName() : string {
return "ModelName";
}
判断select()返回值
$result = $model->select();
if ($result) {}
改为
$result = $model->select();
if (!$result->isEmpty()) {}
或改为
$result = $model->select()->toArray();
if (!empty($result)) {}
不再支持neq
->where("picture", "neq", "") // 有图片的
改为
->where("picture", "<>", "") // 有图片的
不再支持setInc()(改了也无效,建议改为update语句)
$model->where(["id" => $id])
->setInc("view");
改为
$model->where(["id" => $id])
->inc("view");
不再支持getLastInsID()
$result = $model->getLastInsID();
$result = $model->where("id", "=", "{$result}")->find();
改为
$result = $model
->order(["id" => "DESC"])
->find();
不再支持getError()
去掉
$model->getError();
实例化模型
$model = model("Category");
改为
$model = new CategoryModel;
控制器
删除原有的controller文件夹
将“D:\www\Project_PHP_ThinkPHP\01\think\app\controller”删除
_initialize()
自动调用_initialize()
改为
手动调用_initialize()
获取应用名(模块名)
request()->module()
改为
app('http')->getName()
不再支持ROOT_PATH
在“D:\www\Project_PHP_ThinkPHP\01\think\public\index.php”添加配置
在namespace think;后添加
if (!defined('DS')) {
define('DS', DIRECTORY_SEPARATOR);
}
// ROOT_PATH
// .../public/
if (!defined('ROOT_PATH')) {
define('ROOT_PATH', str_replace('\\', '/', realpath(dirname(__FILE__) . '/')) . "/");
}
模板
模板函数
$this->assign("categorys", $categorys);
$this->fetch();
改为
(静态方法)
View::assign("categorys", $categorys);
return View::fetch();
跳转
去掉
use think\Controller;
需要安装跳转扩展
模板常量和关闭模板缓存
在“D:\www\Project_PHP_ThinkPHP\00\think\config\view.php”添加配置
// 模板常量
'tpl_replace_string' => [
'__STATIC__' => '/Project_PHP_ThinkPHP/01/think/public/static',
],
// 关闭模板缓存
'tpl_cache' => false,
分页
在“D:\www\Project_PHP_ThinkPHP\00\think\config\view.php”添加配置
// 分页配置
'paginate' => [
'list_rows' => 5,
],
将“D:\www\Project_PHP_ThinkPHP\01\think\vendor\topthink\think-orm\src\paginator\driver\Bootstrap.php”复制一份
到“D:\www\Project_PHP_ThinkPHP\01\think\app\common\Bootstrap.php”
在“D:\www\Project_PHP_ThinkPHP\01\think\app\provider.php”添加配置
'think\Paginator' => 'app\common\Bootstrap'
注意分页函数paginate的参数改变了
从控制器到模板会强制将字符串转实体
$data = "<span class=\"glyphicon glyphicon-star\"></span>"
{$data}
和
{$users->render()}
改为
$data = "<span class=\"glyphicon glyphicon-star\"></span>"
{$data|raw}
和
{$users->render()|raw}
验证器
验证规则注意事项
建议unique的值对应数据表名
"username" => "require|length:2,100|unique:news_user",
验证规则更新
["mobile", ["require", "regex:/^1(3\d|4[57]|5[0-37-9]|7[6-8]|8[0235-9])\d{8}$/", "unique:user"]]
改为
"mobile" => ["require", "regex:/^1(3\d|4[57]|5[0-37-9]|7[6-8]|8[0235-9])\d{8}$/", "unique:news_user"]
验证器
$model->validate(true) // 调用自定义validate类
改为
// 使用自定义validate类验证方式
try
{
validate(UserValidate::class)->batch(true)->check($data);
}
catch (ValidateException $e)
{
// 验证失败
// var_dump($e->getError());
$this->error($e->getMessage());
}
Session、Cookie
开启Session(使用验证码扩展必须开启Session)
在“D:\www\Project_PHP_ThinkPHP\00\think\app\middleware.php”设置
// Session初始化
\think\middleware\SessionInit::class
控制器中
use think\Session;
use think\Cookie;
改为
use think\facade\Session;
use think\facade\Cookie;
或改为
助手函数(时间参数单位为秒)
// 设置
session("name", "value");
// 判断是否存在
echo session("?name");
// 获取
echo session("name");
// 删除
session("name", null);
// 清除session
session(null);
// 设置
cookie("name", "value", 3600);
// 判断是否存在
echo cookie("?name");
// 获取
echo cookie("name");
// 删除
cookie("name", null);
// 清理全部
cookie(null);
销毁
去掉
session_destroy();
模板中
{$Think.session.xxx}
改为
{$Request.session.xxx}
设置获取配置文件
设置获取配置文件函数
config("name")
改为
use think\facade\Config;
Config::get("name");
Config::has("name");
Config::set("name", "value");
上传文件
获取文件
$files = request()->file("ff");
if ($files) {}
改为
$files = request()->file()["ff"];
if (!empty($files)) {}
验证
引入try catch,验证方法改变,验证图像文件的尺寸和类型有bug
// 保存上传的文件, 并获取文件名数组
$files = request()->file("ff");
if ($files) {
$path = ROOT_PATH . "static/picture";
$pictureArray = [];
foreach ($files as $key => $value) {
$info = $value->validate(["size" => 2048000, "ext" => "jpg,png,gif"])->move($path);
if ($info) {
$pictureArray[] = str_replace("\\", "/", $info->getSaveName());
} else {
$this->error($value->getError());
}
}
// 数据库只能存放字符串数据类型,文件名数组要转化成字符串
$data["picture"] = serialize($pictureArray);
// 将字符串中的双引号替换成单引号
$data["picture"] = str_replace("\"", "'", $data["picture"]);
}
改为
// 保存上传的文件, 并获取文件名数组
$files = request()->file();
try
{
validate(["ff" => "fileSize:2048000|fileExt:jpg"])->check($files);
$files = $files["ff"];
if (!empty($files)) {
$path = ROOT_PATH . "static/picture/";
$pictureArray = [];
foreach ($files as $key => $value) {
$filename = \new_file::get_unique_file_name($value->getOriginalName());
$result = move_uploaded_file($value->getPathName(), $path . $filename);
if ($result) {
$pictureArray[] = $filename;
} else {
$this->error("添加新闻分类失败!");
}
}
// 数据库只能存放字符串数据类型,文件名数组要转化成字符串
$data["picture"] = serialize($pictureArray);
// 将字符串中的双引号替换成单引号
$data["picture"] = str_replace("\"", "'", $data["picture"]);
}
}
catch (ValidateException $e)
{
// 验证失败
// var_dump($e->getError());
$this->error($e->getMessage());
}
发表评论 取消回复