前言
可能很多人都会苦恼,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