首頁  >  文章  >  php框架  >  thinkphp怎麼升級

thinkphp怎麼升級

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼原創
2019-08-26 09:37:025749瀏覽

thinkphp怎麼升級

thinkphp版本升級的相關介紹,以5.0升級到5.1為例:

先看看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框架:

thinkphp怎麼升級

我們先來看看結果出現:

thinkphp怎麼升級

匯入開源商城wstmart程式碼。

相關推薦:《ThinkPHP教程

我們把wstmart開源商城wstmart目錄下的wstmart剪切到tp5目錄下,修改一下index.php文件,讓專案直接在系統根目錄下運行,再接著修改一下資料庫設定檔和開啟偵錯功能,運行一下:

thinkphp怎麼升級嗯? ! !居然出錯了?趕緊翻翻文件看看。文件再往下拉看看,嗯?好吧。原來我太心急,沒有看完,如果是從新定義入口文件的話就不能直接把原來指向public目錄的index.php檔案簡單的拿過來用,還要定義一下應用的目錄,例如:Container::get( 'app')->path(APP_PATH)->run()->send();其中APP_PATH就是要定義的應用的目錄,我再改為:

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

運行看看:

thinkphp怎麼升級

終於正常了。之所以會出現這個結果是因為我沒有修改配置文件,告訴系統預設的模組為home,我再修改一下app.php檔案的'default_module' => 'home',運行看看:

thinkphp怎麼升級

嗯?這個就又是什麼狀況?文件明明存在啊! ! !仔細核對文件,確實存在啊...一定是5.1還有一些精華的地方我又看漏了,於是又返回看文檔。來回掃蕩,來回掃蕩,終於在升級指導上到有這麼一句話:「如果你自訂了應用類別庫的命名空間,需要改為設定環境變數APP_NAMESPACE而不是應用程式設定文件,如果你使用了.env配置文件,可以在裡面新增:APP_NAMESPACE = 你的應用程式類別庫根命名空間名稱」。原來如此! !

於是在系統下建立一個.env檔。內容文:app_namespace=wstmart

再運行看看:

thinkphp怎麼升級

這段話是說這個函數找不到。在thinkphp5.0框架裡,系統會自動載入目錄common下的文件,在5.1裡邊怎麼不會自動載入了?於是我再翻翻thinkphp5.1的源碼看看。看到有這麼一行:

thinkphp怎麼升級

未定義的陣列下邊?這麼詭異的問題?

從下邊的出錯提示,我們可以定位到模組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();

果然這個錯誤就不在出現了。接下來是另一個問題:

thinkphp怎麼升級

參考文檔,在thinkphp5.1中這個函數已經修改了。我們把thinkRequest改成thinkFacadeRequest,錯誤又消失了。

下邊是錯誤:

thinkphp怎麼升級

系統能運作到這裡,說明程式已經能接收並成功回傳訊息了。在頁面上的這個錯,應該就是自訂標籤wst:ads裡邊出錯,導致沒有內容回來了。我們按照上邊的排錯方法繼續回去調試原來是升級時候忘記配置標籤了。我們打開template,加上程式碼'taglib_pre_load' => 'wstmartcommonTaglibWst',然後再刷新一下頁面:

thinkphp怎麼升級

又是熟悉的錯誤,不過這次是其他函數,對於已經找到解決方法的錯誤,我們很容易就解決,這樣就不再累述了。基本上都是修改model裡的查詢函數就可以了。依照前邊的方法改完之後,我們就可以完成Thinkphp 5.0到5.1的升級了。

因為篇幅有限,我就不再一一截圖調試,大家升級之前要熟讀thinkphp官方的升級指導,避免像我一樣一個坑一個坑的填,才終於完成升級。

以上是thinkphp怎麼升級的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:thinkphp5優缺點下一篇:thinkphp5優缺點