ThinkPHP5開發(fā)注意事項

關鍵字:
操作方法的參數(shù)綁定功能
Request屬性注入
用Request類的getInput方法替代file_get_contents('php://input');
永遠不要在操作方法中(事實上是任何代碼中)使用exit;

使用composer镀迂,是趨勢
應用倉庫并非必須闹瞧;
把web根目錄指向public目錄而不是根目錄盒让;資源文件不要放到public目錄以外棒呛;
TP5完美支持PHP7维贺,TP5正常運行需要PHP5.4+澈圈,建議版本為PHP5.6+彬檀;
不要使用普通URL模式訪問;

變量篇

避免直接獲取系統(tǒng)變量瞬女,用Request對象的相關方法替代窍帝;
不管get還是post請求,統(tǒng)一用param方法獲取當前請求(任何請求類型)變量诽偷;
不要直接操作改變當前請求的系統(tǒng)變量坤学;
使用操作方法的參數(shù)綁定功能疯坤,而不是自己手動獲取請求參數(shù);
使用依賴注入(TP5的依賴注入非常的簡單)深浮;
對于一些請求用到的公共屬性可以使用Request屬性注入压怠;
用Request類的getInput方法替代file_get_contents('php://input');
模板中輸出系統(tǒng)變量使用{Request.param.name}的方式飞苇; 多使用Request類的only和except方法獲取多個請求變量菌瘫; 不要直接操作_SESSION變量;
任何變量必須事先定義才能操作或者賦值給模板布卡;

路由篇

用動態(tài)注冊方法而不是路由配置雨让;
不要在路由配置文件之外定義路由;
用get/post/delete/put等路由注冊方法明確指定請求類型忿等;
保證路由變量和操作方法的參數(shù)綁定命名一致(包括可選)栖忠;
路由地址保持和實際的控制器名和方法名一致(包括大小寫);
為每個路由變量明確指定變量規(guī)則贸街;
用路由分組簡化路由定義和公共參數(shù)庵寞;
盡可能使用強制路由并配合MISS路由;
優(yōu)先考慮資源路由尤其是API開發(fā)的時候匾浪;
考慮在路由后置行為中進行統(tǒng)一的權限檢測皇帮;
部署后記得執(zhí)行路由緩存指令卷哩;
了解下路由的請求緩存對你會有幫助蛋辈;

控制器篇

建議開啟controller_suffix配置參數(shù),并采用IndexController命名控制器類将谊;
原則上控制器類不需要繼承think\Controller冷溶;
給你的控制器類繼承一個公共的基類例如Base便于統(tǒng)一調(diào)整;
需要的話在你的基礎控制器類中引入traits\controller\Jump尊浓;
API開發(fā)盡量使用資源控制器(命令行php think create:controller 可以快速生成)逞频;
控制器類中避免寫太多的業(yè)務邏輯,交由模型類完成栋齿;
盡量避免直接操作數(shù)據(jù)庫類苗胀,而是在模型類中做好封裝;
可能的話盡量在控制器層完成數(shù)據(jù)驗證瓦堵;
不要試圖在初始化方法中調(diào)用redirect助手函數(shù)基协,而用$this->redirect方法替代;
始終在控制器方法中return而不是echo以免影響請求緩存菇用;
用json澜驮、view以及redirect助手函數(shù)進行響應輸出;
用abort助手函數(shù)拋出HTTP異常惋鸥;
遵循駝峰法命名你的控制器類和文件名杂穷;
永遠不要在操作方法中(事實上是任何代碼中)使用exit悍缠;

數(shù)據(jù)庫篇

千萬不要用駝峰法命名數(shù)據(jù)表和字段;
如非必要避免直接操作Db類耐量;用Db類的name方法而不是table方法飞蚓;
用視圖查詢view方法替代join方法;
查詢操作盡可能的使用field方法拴鸵,哪怕是field(true)玷坠;
如果要批量執(zhí)行SQL語句使用batchQuery方法;
用value方法獲取單個記錄的某個字段值劲藐;
用column方法獲多條記錄的某個(或者某些)字段值八堡;
靈活使用cache方法進行查詢緩存處理和刪除(不僅是查詢可以用cache方法);
使用fetchSql方法直接返回sql語句而不實際執(zhí)行CURD聘芜;
部署之后記得執(zhí)行命令行的php think optimize:schema指令兄渺;
strict方法可以避免多余的數(shù)據(jù)字段拋出異常;
關于日期和時間的查詢不妨試試whereTime方法汰现;
數(shù)據(jù)庫的大多數(shù)操作都是自動參數(shù)綁定的挂谍,一般情況下無需手動使用bind方法;
insert方法返回的是影響的記錄數(shù)而不是主鍵瞎饲;
使用insertGetId方法插入數(shù)據(jù)并返回主鍵口叙;
delete(true)可以無條件的刪除數(shù)據(jù);
select和find方法支持閉包嗅战,但盡量不要和鏈式操作混用妄田;
需要查詢大量數(shù)據(jù)并且分批處理的話使用chunk方法;
對find方法使用主鍵查詢并且cache(true)的話緩存是自動更新的驮捍;

模型篇

不要以為模型性能比Db差疟呐,這點差別還不抵不過一條SQL查詢,而帶來的便利是可觀的东且;
模型的好處千言萬語抵不過兩個字:對象(明白人都會懂)启具;
模型類一般直接繼承think\Model,如有必要也可以繼承一個公共模型基類珊泳;
如果你的模型類沒有任何的數(shù)據(jù)庫操作的話不需要繼承任何類庫鲁冯;
模型類不需要使用類后綴Model(對應前面的控制器類后綴);
模型的save方法既可以新增也可以更新(而且是自動識別)色查;
模型沒有鏈式操作薯演,所有鏈式操作都是調(diào)用的數(shù)據(jù)庫類Db;
模型支持事件而數(shù)據(jù)庫類的操作不支持事件综慎;
統(tǒng)一在模型的init方法(靜態(tài)方法)中注冊模型事件涣仿;
模型沒有數(shù)據(jù)表前綴的概念只有對應數(shù)據(jù)表(完整表名)的概念;
每個模型對應一個數(shù)據(jù)庫查詢對象Query,彼此獨立好港;
每個模型可以單獨定義自己的數(shù)據(jù)庫連接信息愉镰;
模型名不一定就是數(shù)據(jù)表名,而且可以單獨定義數(shù)據(jù)表名稱钧汹;
模型查詢的數(shù)據(jù)返回永遠都是當前模型對象實例(而不是數(shù)組丈探,Db類查詢才是數(shù)組);
模型對象可以直接進行數(shù)組操作并不需要使用toArray轉(zhuǎn)換(包括模板輸出)拔莱;

模型的查詢操作建議使用get和all方法(靜態(tài)方法)碗降;
要在模型查詢中使用鏈式查詢可以定義查詢范圍或者使用閉包;
用save方法新增數(shù)據(jù)的返回值是影響的記錄數(shù)而不是主鍵值塘秦,獲取主鍵直接獲取當前模型對象的屬性值即可讼渊;
如果僅僅是需要主鍵之外的查詢條件的話,可以在get或者all方法的第一個參數(shù)使用數(shù)組尊剔;
要模型查詢后的原始數(shù)據(jù)可以使用getData方法爪幻;
模型的關聯(lián)操作可以讓你省去很多的關聯(lián)查詢;
鑒于性能考慮须误,關聯(lián)預載入查詢絕對是關聯(lián)查詢的首選挨稿;
一對一的關聯(lián)關系,尤其是主表和附表的關系考慮使用聚合模型京痢;
軟刪除必須使用模型的delete方法(而不是數(shù)據(jù)庫類的delete)才有效奶甘;
不要在修改器中修改多個屬性;
修改器是模型才有的功能祭椰,調(diào)用數(shù)據(jù)庫Db類的寫入操作方法是不會觸發(fā)的臭家;
不要在同一個模型實例中多次調(diào)用save新增數(shù)據(jù),一旦新增數(shù)據(jù)成功后吭产,再次save就是更新數(shù)據(jù)了侣监,除非你顯式調(diào)用isUpdate(false)鸭轮;
用模型事件取代自動完成臣淤;

其它篇

開發(fā)過程中開啟調(diào)試模式,部署后記得關閉窃爷;
如果不是API開發(fā)的話開啟頁面Trace顯示邑蒋;
不要輕易忽視異常頁面的任何信息,它們不是擺設按厘;
開發(fā)中一定要嚴格注意大小寫医吊,這是基本素質(zhì);
如果是接口開發(fā)嘗試使用 postman 進行調(diào)試逮京;
使用命名空間和自動加載卿堂,避免直接 require 及 include ;
不建議使用 import 和 vendor 方法;
應用目錄下面的common.php(注意不是command.php)可以添加應用的函數(shù)草描,并且實時生效览绿;
不要手動下載擴展包放入vendor目錄,不支持composer安裝的擴展類庫直接放入extend穗慕;
只要是使用命名空間的第三方類庫饿敲,都是可以直接在TP5下面使用的;
盡可能的采用MVVM設計架構來替代MVC架構逛绵,充分發(fā)揮TP5的API優(yōu)勢怀各;
如果使用模板,避免在模板中使用過多的數(shù)據(jù)邏輯术浪;
模板繼承和模板布局是可以配合使用的瓢对;

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市胰苏,隨后出現(xiàn)的幾起案子沥曹,更是在濱河造成了極大的恐慌,老刑警劉巖碟联,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妓美,死亡現(xiàn)場離奇詭異,居然都是意外死亡鲤孵,警方通過查閱死者的電腦和手機壶栋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來普监,“玉大人贵试,你說我怎么就攤上這事】” “怎么了毙玻?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長廊散。 經(jīng)常有香客問我桑滩,道長,這世上最難降的妖魔是什么允睹? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任运准,我火速辦了婚禮,結果婚禮上缭受,老公的妹妹穿的比我還像新娘胁澳。我一直安慰自己,他們只是感情好米者,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布韭畸。 她就那樣靜靜地躺著宇智,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胰丁。 梳的紋絲不亂的頭發(fā)上普筹,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音隘马,去河邊找鬼太防。 笑死,一個胖子當著我的面吹牛酸员,可吹牛的內(nèi)容都是我干的蜒车。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼幔嗦,長吁一口氣:“原來是場噩夢啊……” “哼酿愧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起邀泉,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤嬉挡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后汇恤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庞钢,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年因谎,在試婚紗的時候發(fā)現(xiàn)自己被綠了基括。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡财岔,死狀恐怖风皿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匠璧,我是刑警寧澤桐款,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站夷恍,受9級特大地震影響魔眨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜裁厅,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一冰沙、第九天 我趴在偏房一處隱蔽的房頂上張望侨艾。 院中可真熱鬧执虹,春花似錦、人聲如沸唠梨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茬故,卻和暖如春盖灸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背磺芭。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工赁炎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钾腺。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓徙垫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親放棒。 傳聞我的和親對象是個殘疾皇子姻报,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容