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框架:
我們先來看看結果出現:
匯入開源商城wstmart程式碼。
相關推薦:《ThinkPHP教程》
我們把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官方的升級指導,避免像我一樣一個坑一個坑的填,才終於完成升級。
以上是thinkphp怎麼升級的詳細內容。更多資訊請關注PHP中文網其他相關文章!