咨询热线:18076568990、0755-25823180

ThinkPHP 5.0升级到ThinkPHP 5.1全过程分享

2020-8-28 00:21| 发布者: shopwt| 查看: 829| 评论: 0

简介: Thinkhp5.0日趋稳固之后,thinkphp官方又马不绝蹄的开展了5.1版本的更新迭代。作为技能人,一直是喜欢尝新,既然5.1出来了,赶紧入手相识相识下。 起首打开文档看看开辟目次有没有变革,渴望不要和3.X一样改

Thinkhp5.0日趋稳固之后,thinkphp官方又马不绝蹄的开展了5.1版本的更新迭代。作为技能人,一直是喜欢尝新,既然5.1出来了,赶紧入手相识相识下。
起首打开文档看看开辟目次有没有变革,渴望不要和3.X一样改得焕然一新了。

先看看5.0总的目次布局:

project 应用摆设目次
├—application 应用目次(可设置)
├—extend 扩展类库目次(可界说)
├—public WEB 摆设目次(对外访问目次)
├—runtime 应用的运行时目次(可写,可设置)
├—vendor 第三方类库目次(Composer)
├—thinkphp 框架体系目次

再看看5.1总的目次布局:

www WEB摆设目次(大概子目次)
├—application 应用目次
├—config 应用设置目次
├—route 路由界说目次
├—public WEB目次(对外访问目次)
├—thinkphp 框架体系目次
├—extend 扩展类库目次
├—runtime 应用的运行时目次(可写,可定制)
project 应用摆设目次
├—application 应用目次(可设置)
├—extend 扩展类库目次(可界说)
├—public WEB 摆设目次(对外访问目次)
├—runtime 应用的运行时目次(可写,可设置)
├—vendor 第三方类库目次(Composer)
├—thinkphp 框架体系目次
├—vendor 第三方类库目次(Composer依赖库)

通过第一层目次我们可以看到5.1只是多了config和route目次,分析5.1版本已经把设置文件和路由器文件给提取出来了。

下边我们以wstmart开源商城体系作为例子来实行升级一下。

起首我们通过git导出最新的thinkphp5.1框架:


我们运行一下看看效果出现:


导入开源商城wstmart代码。


我们把wstmart开源商城wstmart目次下的wstmart木剪切到tp5目次下,修改一下index.php文件,让项目直接在体系根目次下运行,再接着修改一下数据库设置文件和打开调试功能,运行一下:


嗯?!!居然堕落了?赶紧翻翻文档看看。文档再往下拉看看,嗯?好吧。原来我太心急,没有看完,假如是重新界说入口文件的话就不能直接把原来指向public目次的index.php文件简朴的拿过来用,还要界说一下应用的目次,比方:Container::get('app')->path(APP_PATH)->run()->send();此中APP_PATH就是要界说的应用的目次,我再改改为:

Container::get('app')->path(__DIR__ . '/wstmart/')->run()->send();

运行看看:


终于正常了。之以是会出现这个效果是由于我没有修改设置文件,告诉体系默认的模块为home,我再修改一下app.php文件的 'default_module' => 'home',运行看看:


嗯?这个就又是什么情况?文件显着存在啊!!!细致查对文件,确实存在啊...肯定是5.1另有一些英华的地方我又看漏了,于是又返回看文档。来回扫荡,来回扫荡,终于在升级引导上到有这么一句话:“假如你自界说了应用类库的定名空间,须要改为设置情况变量APP_NAMESPACE而不是应用设置文件,假如你使用了.env设置文件,可以在内里添加:APP_NAMESPACE = 你的应用类库根定名空间名”。原来云云!!

于是在体系下创建一个.env文件。内容文:app_namespace=wstmart

再运行看看:



这段话是说这个函数没有找到。在thinkphp5.0框架里,体系会自动加载目次common下的文件,在5.1里边怎么不会自动加载了?于是我再翻翻thinkphp5.1的源代码看看。看到有这么一行:


未界说的数组下边?这么诡异的标题?

从下边的堕落提示,我们可以定位到模块home的index.php文件调用的函数getFloors里去,堕落提示是代码:

$rs = Db::name('goods_cats')->where(['dataFlag'=>1, 'isShow' => 1,'parentId'=>['in',$ids],'isFloor'=>1])

->field("parentId,catName,catId")->order('catSort asc')->select();

出了标题。我们再翻文档看看。文档上说:

改变了查询构造器的数组多字段批量查询,从原来的

where(['name'=>['like','think%'], 'id'=>['>',0],])

须要调解为

where([['name','like','think%'], ['id','>',0],])

我们参照上边的分析把代码修改为:

$rs = Db::name('goods_cats')->where([['dataFlag','=',1], ['isShow','=',1],['parentId','in',$ids],['isFloor','=',1]])

->field("parentId,catName,catId")->order('catSort asc')->select();

果然这个错误就不在出现了。接下来是别的一个标题:

参看文档,在thinkphp5.1中这个函数已经修改了。我们把thinkRequest改成thinkFacadeRequest,错误又消散了。

下边是错误:


体系能运行到这里,分析步调已经能吸收并乐成返复书息了。在页面上的这个错,应该就是自界说标签wst:ads里边堕落,导致没有内容返回了。我们按照上边的排错方法继续归去调试原来是升级时间忘记设置标签了。我们打开template,加上代码'taglib_pre_load' => 'wstmartcommonTaglibWst',然后再革新一下页面:


又是熟悉的错误,不外这次是其他函数,对于已经找到办理办法的错误,我们很容易就办理,如许就不再累述了。根本上都是修改model里的查询函数就可以了。按照前边的办法改完之后,我们就可以完成Thinkphp 5.0到5.1的升级了。

由于篇幅有限,我就不再逐一截图调试,各人升级之前要熟读thinkphp官方的升级引导,克制像我一样一个坑一个坑的填,才终于完成升级。



ShopWT(www.shopwt.com)是国内知名商城系统及商城网站建设提供商,其中销客多小程序系统为商家提供小程序商城开发、小程序分销系统、微分销系统、商城系统、电商网站建设、微信分销系统、小程序商城等多端商城及电子商务行业解决方案>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
收藏 分享 邀请

鲜花

握手

雷人

路过

鸡蛋

精彩阅读

更多+

最新活动

联系我们

产品及方案咨询:18076568990、0755-25823180

电子邮箱:web@shopwt.com、客服微信:shopwtcom

公司地址:深圳市罗湖区人民南路3002号国贸大厦B座1608楼

  • 官方公众号

  • 微信客服