https://blog.csdn.net/weixin_43409309/article/details/107148582
寫在前面
tp6發布已經有大半年了,之前做項目一直用的tp5,甚至沒有用5.1,是因為tp5用來做了很多個項目,文檔前后翻了可能有兩三遍,所以對tp5會比較熟悉(個人感覺)。最近剛好做數據庫的大作業,時間不大夠,放棄了原來用springboot 的打算;正巧又打算把之前的項目從tp5遷移到tp6,所以打算借著這個機會先把tp6的坑踩一下,而且有之前tp5的基礎,應該問題不大。
接下來我會按照開發過程的順序,從控制器(C)、模型(M)、一些配置、亂七八糟會用到的地方進行對比,同時也會講一些坑點。
不同點
安裝
首先一個比較大的差別是安裝不再有分發壓縮包的形式,改成了用composer來分發。2020年了,這確實是一個比較好的方案,看得出tp已經是一個比較成熟的框架了。而且同大版本號可以通過composer直接更新,整個流程比較流暢。
食用方式:
composer create-project topthink/think tp
1
※坑點:composer國內訪問較慢,換源可以大大提升體驗,方法可以參考https://blog.csdn.net/weixin_43409309/article/details/105577082
配置文件
比較明顯的是tp5里面的config.php被拆分成了app、cache、database、route等等模塊,放在了config文件夾里。這個部分實際上變動不太大,實現也是通過配置加載的方式,我在tp5的時候已經有自己定義配置然后加載了,這個部分沒有太大亮點。
值得一提的是,tp6新引入了一個.env的文件,可以通過讀取這個環境設置去配置數據庫等等之類config里面的內容。文件采用ini格式,可以修改數據庫連接等常用的配置,比較方便。之前如果分散在各處的一些配置(如ip地址、密碼加密的鹽值之類)可以放在同一個地方了,方便了在不同環境里部署。
但是,這里要打一個但是,我一開始以為這里是一個類似springboot里面.properties文件的那種機制,可以通過不同的環境文件區分例如測試環境和開發環境。實際上只能存在一個名叫".env"的文件(注意不是后綴名)。這里就會出現一個,在不同環境切換時可能會出現誤操作覆蓋了這個文件的情況,始終覺得有些別扭。
※坑點:環境文件的命名一定是“.env",沒有別的字符
自帶web服務器
這確實是一個比較大的改變,調試的時候再也不需要拿出xampp了,直接php think run就可以在本地啟動一個web服務器,還可以用-p參數指定端口,確實比較方便。我現在已經習慣了在PHPstormProjects下直接開發項目(因為用pycharm用多了),如果要把文件復制到htdocs里面才能測試就很麻煩,這個web服務器有點對我胃口。
※坑點:不知道是什么原因,感覺這個web服務器性能可能有問題,一個普通的響應居然用時500ms+,生產環境下還是用正經的web服務器。
目錄
新版本的目錄是有比較大的變化的,例如之前的config.php就拆分成了一個config文件夾,application文件夾重命名為app文件夾,等等之類。
※坑點:建議看一下tp6文檔里的目錄結構
控制器
這個方面變化還挺大,感覺底層可能有比較大的變動。以往控制器需要繼承think\Controller類,現在官方有一個BaseController,實現的控制器只需要繼承這個控制器基礎類就可以。(在Model上就沒有看到這個變化)
json接口
剛好說完控制器,就必須得說一下我在做JSON-RPC的時候經常用的一套方法:封裝一個BaseController,在這里構造用來返回的JSON;然后其他控制器繼承這個基類控制器,就可以比較方便地渲染JSON數據返回。現在的workaround跟原來也是類似的,用一個ResponseController去繼承BaseController,然后其他控制器再繼承ResponseController。
※坑點:這里有一個比較奇怪的改變是,tp5可以在配置文件中設置返回類型為json,這樣在返回時只需要返回一個數組,框架就能包裝成json返回。在tp6里沒有找到這樣的配置,好像只能手動json()然后再返回。
※坑點:輸入的時候也是,以往輸入函數可以自動處理json,例如可以通過input("post.")獲取到post上來的json,然后解析成一個數組;tp6把json轉換成一個表單,需要通過類似表單獲取的方式訪問,體驗跟tp5稍有不同。
跨域
還記得之前的跨域問題嗎?(https://blog.csdn.net/weixin_43409309/article/details/104287425)這個問題在tp6里終于有比較方便的解決方案了,只需要在middleware.php中注冊\think\middleware\AllowCrossDomain就可以搞定跨域了。
中間件
tp6改進了中間件,具體的使用可以看一下文檔,因為我沒有用過 ,這方面沒太大感覺。
總結
雖然說是一個大版本更新,底層有比較大的改變,實際操作跟tp5差別并不大。有朋友說tp6剛出的時候比較多bug,因此我也是沒有第一時間嘗新;現在半年多過去,感覺已經能夠穩定使用了,在這一兩天中也沒有發現其他什么大的問題。
另外有一個比較想吐槽的問題是,tp6的文檔更新得真的太慢,很多文檔目前還欠缺,例如視圖層的文檔就直接叫你參考tp5的了,以及tp5的完全開發手冊其實也還有很多坑沒有填上,而且在說明上也不夠清楚。另外,助手函數在附錄中單列了出來,但又沒有具體的文檔,只有一個名錄,這方面有點拉胯。希望團隊能重視一下文檔的建設,像我這樣的菜雞在學習起來會比較有困難。
————————————————
版權聲明:本文為CSDN博主「Leslie_Leung」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_43409309/article/details/107148582
- 空白目錄1
- RBAC
- RBAC權限模型[完整]
- 你知道權限管理的RBAC模型嗎?
- rbac 一個用戶對應多個賬號_如何設計一個強大的權限系統
- Postman 快速使用(設置環境變量)
- postman的使用方法詳解!最全面的教程
- Postman常用的幾個功能
- ThinkPHP項目總結
- thinkphp5 遞歸查詢所有子代,查詢上級,并且獲取層級
- PHP原生項目之留言板
- 智慧校園
- PHP如何實現訂單的延時處理詳解
- VUE
- const {data:res} = await login(this.loginForm)
- Vue中的async和await的使用
- PHP實現消息推送(定時輪詢)
- tp5 計算兩個日期之間相差的天數
- 使用jquery的ajax方法獲取下拉列表值
- jQuery實現select下拉框選中數據觸發事件
- SetFocus 方法
- 快來了解下TP6中的超級函數app()!
- PHP socket 服務器框架 workerman
- 程序員如何才能成為獨立開發者?
- PHP 錯誤處理
- php面向對象類中的$this,static,final,const,self及雙冒號 :: 這幾個關鍵字使用方法。
- 小白教你玩轉php的閉包
- 關于TP6項目搭建的坑(多應用模式)
- ThinkPHP6.0 與5.0的差別及坑點
- axios在vue項目中的使用實例詳解
- php中的類、對象、方法是指什么
- 聊一聊PHP的依賴注入(DI) 和 控制反轉(IoC)
- 深入理解控制反轉(IoC)和依賴注入(DI)
- Private,Public,Protected
- ThinkPHP5(目錄,路徑,模式設置,命名空間)
- 在 ThinkPHP6 中使用 Workerman
- 介紹thinkphp lock鎖的使用和例子
- php中_initialize()函數與 __construct()函數的區別說明
- api接口數據-驗證-整理
- api接口數據-驗證-整理【續】
- TP6容易踩得坑【原創】
- TP6的日志怎么能記錄詳細的日志?
- 是否需要模型分層
- PHP面試題 全網最硬核面試題來了 2021年學習面試跳槽必備(一)
- MySQL單表數據量過千萬,采坑優化記錄,完美解決方案
- MySql表分區(根據時間timestamp)
- MySQL大表優化方案
- 閑言碎語
- 數據庫外鍵的使用
- 深入理解thinkphp、laravel等框架中容器概念
- vue做前端,thinkphp6做后臺,項目部署
- 簡單MVC架構的PHP留言本
- TP5里面extend和vendor的區別
- 在mysql數據庫中制作千萬級測試表
- MySQL千萬級的大表要怎么優化
- ThinkPHP關聯模型操作實例分析
- lcobucci/jwt —— 一個輕松生成jwt token的插件
- RESTful API 設計指南
- MySQL如何為表字段添加索引
- ThinkPHP6.0快速開發手冊(案例版)
- tp5 靜態方法和普通方法的區別
- 數據字典功能
- mysql中的數據庫ID主鍵的設置問題
- 基于角色的權限控制(django內置auth體系)
- RBAC系統經典五張表
- 什么是接口文檔,如何寫接口,有什么規范?
- thinkphp5.0自定義驗證器