文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ThinkPHP5 如何升级到 ThinkPHP6?

2023-10-03 15:47

关注

前言

可能很多人都会苦恼,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>"{$data}

{$users->render()}

改为

$data = "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);// 清除sessionsession(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());}

来源地址:https://blog.csdn.net/skyksksksksks/article/details/129849127

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯