### 2019 年 1 月 30 日 發(fā)布
本次更新了大量的細節(jié),進一步統(tǒng)一和精簡了用法,并且新增了一些功能。
>[danger] 在正式版發(fā)布之前,不建議用于正式項目,目前也還沒有完善的文檔和詳細的測試。
## 主要更新
相比較`beta2`版本([`Beta2`版本更新參考這里](https://blog.thinkphp.cn/852702)),除了一些修正和改進外,主要包含了如下的功能更新和調(diào)整。
### 視圖和模板引擎從核心分離
視圖和模板引擎類不再內(nèi)置到核心框架,需要的時候可以單獨通過
```
composer require topthink/think-view
```
安裝,如果使用
```
composer create-project topthink/think
```
會默認安裝該組件(如果不需要使用的話可以自己卸載`topthink/think-view`)。
安裝后,由于內(nèi)置的`think\Controller`類不再封裝視圖方法,如果你的控制器類需要調(diào)用`fetch`/`display`/`assign`等視圖方法,必須繼承 `think\ViewController`類,使用`view`助手函數(shù)方式用法不變。
### 取消數(shù)據(jù)庫的`setInc`/`setDec`/`setField`方法
原來的`setInc`/`setDec`/`setField`方法不再支持,使用`inc`/`dec`/`update`方法替代。例如:
```
Db::name('user')->where('id', 1)
->inc('exp')
->dec('score')
->update();
```
### 取消查詢`eq/neq/gt/lt/egt/elt`表達式
由于存在兩種用法,并且不夠直觀,全部統(tǒng)一為更直觀的用法。
下面的用法不再支持
```
Db::name('user')->where('id', 'egt', 1)
->where('status', 'neq' ,1)
->select();
```
統(tǒng)一使用
```
Db::name('user')->where('id', '>=', 1)
->where('status', '<>' ,1)
->select();
```
### 取消分表功能
出于分表的性能問題和復雜性,不再提供分表方法,建議使用數(shù)據(jù)庫的分區(qū)功能替代。
### 增加年/月/日的便捷日期查詢方法
可以使用下面的便捷日期查詢
```
// 查詢2018年的博客數(shù)
Db::name('blog')->whereYear('create_time', '2018')->count();
// 查詢2018年12月的博客數(shù)
Db::name('blog')->whereMonth('create_time', '2018-12')->count();
// 查詢2018年12月24日的博客數(shù)
Db::name('blog')->whereDay('create_time', '2018-12-24')->count();
```
### `query`原生查詢也可以支持查詢緩存
使用query進行SQL語句查詢的時候也可以支持查詢緩存,例如:
```
Db::cache('cache_key')->query("select * from blog where create_time > '2018-12-1'");
```
如果使用了數(shù)據(jù)庫的讀寫分離,需要從主庫查詢的話,需要使用
```
Db::master(true)->query("select * from blog where create_time > '2018-12-1'");
```
### 數(shù)據(jù)庫的查詢統(tǒng)計合并
數(shù)據(jù)庫的查詢次數(shù)合并到`queryTimes`,不再區(qū)分讀寫操作,你可以使用下面的方法獲取當前請求的數(shù)據(jù)庫查詢次數(shù)(包括讀寫)
```
Db::getQueryTimes();
```
### 模型延遲自動保存
模型增加延遲保存方法`lazySave`,調(diào)用該方法后不會馬上保存數(shù)據(jù),僅僅是保存在內(nèi)存中,當前模型對象銷毀的時候或者下次顯式調(diào)用`save`方法的時候都會自動保存到數(shù)據(jù)庫。
```
$user = User::find(1);
$user->name = 'thinkphp';
$user->lazySave();
...
$user->score = 100;
$user->save();
```
### 模型事件調(diào)整
模型事件不再支持使用`event`方法注冊事件,統(tǒng)一使用模型事件觀察者類,你只需要在模型定義或者初始化的時候設(shè)置`observerClass`屬性。
```
<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
protected $observerClass = 'app\index\observe\User';
}
```
所有的模型事件統(tǒng)一在觀察者類中進行定義,方法的命名規(guī)范如下:
```
<?php
namespace app\index\observe;
class User
{
public function onAfterRead($user){
$user->extra = 'extra';
}
public function onBeforeWrite($user){
$user->extra = 'extra';
}
}
```
并且模型增加`after_read`事件,在查詢后創(chuàng)建模型對象實例的時候觸發(fā)。
### 模型屬性和數(shù)據(jù)表字段的對應關(guān)系
默認情況下,模型對象數(shù)據(jù)字段嚴格區(qū)分大小寫,你可以關(guān)閉嚴格模式(前提是必須保持數(shù)據(jù)表字段的小寫和下劃線定義規(guī)范),然后在模型中使用的時候,如果使用駝峰命名調(diào)用,則會自動轉(zhuǎn)換為小寫和下劃線規(guī)范的字段(關(guān)連模型除外),例如:
```
<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
protected $strict = false;
}
```
然后,下面的代碼
```
$user = User::find();
echo $user->nick_name;
$user->nick_name = 'test';
$user->save();
```
和下面的用法是等效的
```
$user = User::find();
echo $user->nickName;
$user->nickName = 'test';
$user->save();
```
>[danger] 如果你的數(shù)據(jù)表字段不符合規(guī)范(存在大小寫混合使用的情況),那么必須在模型中開啟`strict`屬性。
### 增加樂觀鎖功能
和軟刪除一樣,增加了一個`think\model\concern\OptimLock`Trait用于方便引入擴展模型的樂觀鎖功能。
```
<?php
namespace app\index\model;
use think\model\conern\OptimLock;
use think\Model;
class User extends Model
{
use OptimLock;
protected $optimLock = 'lock_version';
}
```
### 增加`PSR-11`支持
支持`PSR-11`規(guī)范,增加`psr/container`依賴,`Container`類增加`pull`方法替代之前的靜態(tài)`get`方法。
### 增加閉包數(shù)據(jù)的緩存序列化支持
添加了`opis/closure`依賴用于支持閉包的序列化支持。
### 增加自動多應用支持
支持在同一個入口文件中訪問多個應用,并且支持應用的映射關(guān)系以及自定義。
例如在`index.php`入口文件中使用:
~~~
(new App())->autoMulti()->run()->send();
~~~
就可以不必創(chuàng)建入口文件自動通過URL訪問多個應用
~~~
http://serverName/index.php/admin
~~~
如果你的默認應用不是`index`(默認為入口文件名),那么可以通過`name`方法指定默認應用。
~~~
(new App())->autoMulti()
->name('admin')
->run()
->send();
~~~
支持應用名的別名映射,例如:
~~~
(new App())->autoMulti([
'think' => 'admin', // 把admin應用映射為think
])->run()->send();
~~~
如果需要對某個應用進行自定義,可以使用
~~~
(new App())->autoMulti([
'admin' => function($app) {
$app->debug(true)->useClassSuffix();
}
])->run()->send();
~~~
### 取消別名路由
因為使用場景有限和性能開銷問題,取消原來的別名路由功能,建議使用資源路由或者單獨的路由替代。
### 取消快捷路由
因為使用場景有限和不太符合規(guī)范,取消了原來的控制器快捷路由功能。
### 取消空操作功能
建議使用分組MISS路由功能替代。
### 應用類庫后綴規(guī)范
取消了`controller_suffix`和`class_suffix`配置參數(shù),App類增加了`controllerSuffix`方法用于開啟控制器類庫的`Controller`后綴(默認不開啟)。其它應用類庫的后綴由項目自己決定,框架不再強制規(guī)范。
>[danger] 需要注意的是,如果你的模型類命名使用了`Model`后綴的話,一定要定義`name`屬性或者`table`屬性。
### 異常響應輸出類型
增加`exception_response_type`配置參數(shù)用于設(shè)置異常響應輸出的類型,默認為`html`類型。如果你的應用全部用于接口開發(fā),可以配置為`json`類型。
## 更新日志
### 路由
* 路由檢測作為`AppInit`事件響應獨立出App類,可配置事件定義文件不使用路由功能
* 路由定義的方法簡化`option`和`pattern`參數(shù),統(tǒng)一使用方法進行路由參數(shù)和變量規(guī)則設(shè)置
* 取消別名路由和快捷路由功能
* 取消多級控制器的自動搜索功能
* 路由分組不再支持數(shù)組方式定義分鐘下面的路由規(guī)則
* 取消路由的`mergeExtraVars`方法和設(shè)置
* 提升路由變量替換的性能
* 判斷路由規(guī)則定義添加對請求類型的判斷
* 路由地址支持`Dispatch`對象
### 數(shù)據(jù)庫和模型
* 改進模型的數(shù)據(jù)類型強制轉(zhuǎn)換對`Expression`對象的支持
* 模型查詢統(tǒng)一返回對象 取消`findOrEmpty`方法 模型類增加`isEmpty`方法
* 增加`raw`助手函數(shù)
* 修正`mysql`的`regexp`查詢
* 改進聚合查詢方法的`field`參數(shù)支持`Expression
`
* `where`方法支持傳入`Query`對象
* 改進`Connection`類`getRealSql`方法
* Query類`cache`方法支持傳入`CacheItem`類
* Query類`find/select/cursor`方法不再支持閉包
* 模型增加`lazySave`方法 用于延遲自動保存
* 統(tǒng)一模型數(shù)據(jù)的讀取和寫入,支持駝峰和下劃線自動智能識別
* 取消數(shù)據(jù)庫的分表功能支持
* 改進`join`方法支持參數(shù)綁定
* 取消`setInc`/`setDec`方法和`setField`方法
* 模型增加`strict`屬性 支持開啟字段區(qū)分大小寫 默認不區(qū)分,數(shù)據(jù)庫字段強制使用小寫
* 取消查詢方法的`eq neq lt gt elt egt`等表達式
* 統(tǒng)一模型事件為使用模型事件觀察者 廢棄`event`方法注冊模型事件
* 增加`after_read`模型事件
* 增加`whereYear`/`whereMonth`/`whereDay`查詢方法
* Query類`query`方法支持查詢緩存
* 增加`procedure`方法用于指定是否為存儲過程調(diào)用
* 簡化`cursor`、`query`和`execute`方法參數(shù)
* 廢棄數(shù)據(jù)庫執(zhí)行次數(shù) 合并到查詢次數(shù)
* Connection類`getCursor`方法調(diào)整 取消`relation`參數(shù)
* 取消一對一關(guān)聯(lián)的`setEagerlyType`方法
* 改進軟刪除`destory`方法重復執(zhí)行事件的問題
* 修正多對多中間表的寫入
* 改進關(guān)聯(lián)模型的`save`方法
* 增加樂觀鎖`Trait`
### 控制器
* 取消`ActionBegin`事件
* 改進控制器中間件執(zhí)行
* 修正控制器名稱獲取
* 改進App類的`useClassSuffix`方法的默認值
* 取消`controller_suffix`配置,改用App類的`controllerSuffix`方法設(shè)置
* 取消 `url_controller_layer `配置,改用App類的`controllerLayer`方法設(shè)置
* 取消 `class_suffix `配置
* 取消`App`類的`action`方法
* 取消`empty_controller`配置,改用`App`類的`emptyController`方法設(shè)置
* 取消空操作
### 緩存
* 改進緩存`CacheItem`類增加`expire`和`tag`方法支持
* 改進`CacheItem`類`getExpire`方法
* 改進`CacheItem`的緩存有效期處理
* 改進緩存類的`remember`方法
* FIX:當使用`complex`緩存的時候,通過`store`方法選擇驅(qū)動,提供給`connect`的參數(shù)類型錯誤
* 改進Redis緩存驅(qū)動的`tag`支持
* 改進`Redis`驅(qū)動
* 改進緩存類 取消`xcache`驅(qū)動
* 改進緩存標簽的獲取
* 增加緩存序列化的閉包支持
### 驗證
* 改進`unique`驗證方法
* 改進驗證類的自定義驗證正則
* 驗證方法調(diào)整
* 增加`validate`助手函數(shù)
## 其它
* 改進`Cookie`類的`setCookie`方法
* `App`類增加`classBaseName`方法
* 改進`Url`生成的端口問題
* 修正`Request`類`param`方法
* 語言檢測、路由檢查、請求緩存功能獨立作為事件響應
* `Request`增加單獨的`middleware`方法傳遞中間件變量
* 取消`App`類的`log`方法
* 增加`exception_response_type`配置參數(shù)
- 值得升級到5.1的18個理由
- 5.1.7版本新特性
- JSON字段類型在ORM中的使用
- 文件下載響應對象
- 教你使用5.1的數(shù)組對象查詢
- 模型三大利器之一:搜索器
- 在ThinkPHP中使用Yaconf
- 掌握命令行的表格輸出
- 5.1.25查詢參數(shù)綁定的改進
- ThinkPHP安全規(guī)范指引
- 巧用數(shù)據(jù)集的排序功能實現(xiàn)統(tǒng)計排序
- think-orm ——基于5.1的獨立ORM庫
- think-template——基于ThinkPHP的獨立模板引擎
- ThinkPHP5.1.26版本發(fā)布——修正版本,包含安全更新
- ThinkPHP5.0和3.2再發(fā)安全更新
- 官宣:ThinkPHP發(fā)布首個LTS版本
- 你真的了解Db類和模型的正確使用姿勢么?
- 如何更有效的記錄和管理日志
- 模型三大利器之二:修改器
- ThinkPHP5.1.28版本發(fā)布——修正上一版本問題,改進關(guān)聯(lián)查詢
- 模型三大利器之三:獲取器
- API版本控制的幾種思路
- ThinkPHP5.2第一個Beta版本發(fā)布測試
- 讓你少犯錯的數(shù)據(jù)查詢基本原則
- ThinkPHP發(fā)布5.1.29版本——常規(guī)更新
- 這15個好習慣讓你更容易升級到5.2
- 如何有效提高ThinkPHP的應用性能
- 讓你提高開發(fā)效率的查詢技巧
- 模型關(guān)聯(lián)查詢不完全指南
- 5.2發(fā)布Beta2版本——統(tǒng)一和精簡大量用法
- ThinkPHP發(fā)布5.1.30版本——支持微秒時間字段寫入
- ThinkPHP的數(shù)據(jù)緩存使用
- ThinkPHP5.2安裝及入口文件
- ThinkPHP榮獲2018 年度最受歡迎中國開源開發(fā)框架第1名
- 5.1路由使用心得技巧
- ThinkPHP5.*版本發(fā)布安全更新
- ThinkPHP項目及代碼規(guī)范指北
- 5.2版本的設(shè)計規(guī)范指導
- ThinkPHP5.1.32版本發(fā)布——圣誕快樂
- 利用Trait特性給模型增加樂觀鎖功能
- 5.2數(shù)據(jù)庫和模型的變化(摘要)
- ThinkPHP模板引擎實現(xiàn)和常見問題
- ThinkPHP5.0.24版本發(fā)布——安全更新
- 不忘初心,方得始終——ThinkPHP十三周年報告
- ThinkPHP5+相關(guān)資源匯總
- 異步社區(qū)ThinkPHP周年慶專享優(yōu)惠活動
- 5.2路由的調(diào)整和改進
- ThinkPHP發(fā)布5.1.33版本——包含安全更新
- ThinkPHP擴展開發(fā)指南
- ThinkPHP發(fā)布5.2Beta3版本
- ThinkPHP發(fā)布5.1.34版本——喜迎新年
- ThinkPHP發(fā)布5.2RC1版本
- ThinkPHP發(fā)布5.1.35版本——常規(guī)更新
- 5.2配置類的調(diào)整
- 5.2時間查詢的改進和優(yōu)化
- 5.2RC版本升級不完全指導(僅供學習參考)
- ThinkPHP5.2版本正式變更為6.0版本
- ThinkPHP百度云云虛擬主機專享免費活動
- 事件系統(tǒng)以及查詢事件、模型事件的使用
- ThinkPHP6.0RC2版本發(fā)布——架構(gòu)升級、精簡核心
- ThinkPHP5.1.36LTS版本發(fā)布——常規(guī)更新
- 新版Session和Cookie設(shè)計變化
- ThinkPHP5.1.37版本發(fā)布——常規(guī)更新
- ThinkPHP6.0RC3版本發(fā)布——細節(jié)完善,體驗優(yōu)化
- 6.0中間件使用詳解
- Composer各大廠商鏡像地址
- ThinkPHP6.0發(fā)布計劃公告
- 「ThinkPHP開發(fā)者周刊」招募志愿者
- ThinkPHP6.0日志變化
- ThinkPHP5.1.38版本發(fā)布——常規(guī)更新
- ThinkPHP6.0RC4版本發(fā)布——ORM獨立,日志多通道支持
- ThinkORM2.0開發(fā)指南上線
- ThinkPHP6.0RC5版本發(fā)布——多應用模式獨立,中間件機制調(diào)整
- ThinkPHP6.0版本發(fā)布——程序員節(jié)福利
- ThinkPHP5.1.39LTS版本發(fā)布——常規(guī)更新
- ThinkPHP6.0.1版本發(fā)布——圣誕快樂!
- 回顧2019,展望2020!
- ThinkPHPV6.0.2版本發(fā)布——2020新春快樂!
- 周年福利系列:Swoole合作優(yōu)惠
- 億速云成為ThinkPHPV6.0獨家贊助發(fā)布商??
- 新冠疫情工具和限免資源專題(保持更新中)
- 周年福利系列:創(chuàng)宇信用認證合作優(yōu)惠
- 周年福利系列:碼云企業(yè)版限時10%優(yōu)惠
- 周年福利系列:想天短說抵現(xiàn)優(yōu)惠
- think-swoole直播:從零開始掌握swoole開發(fā)
- 周年福利系列:B2C開源電商ShopXO授權(quán)8折優(yōu)惠
- 周年福利系列:LayuiAdmin 永久授權(quán)限時優(yōu)惠
- ThinkPHP資源導航站上線——構(gòu)建生態(tài) 服務未來
- ThinkPHP官方技術(shù)支持服務和應用服務市場上線公測
- ThinkPHP市場精選——推廣基本要素
- ThinkPHP市場精選——客服聊天專題
- ThinkPHPV6.0.3版本發(fā)布——端午安康
- ThinkPHP開發(fā)者扶持計劃
- 6.0.3版本關(guān)鍵更新及升級事項
- 「ThinkPHP開發(fā)者周刊」改版重啟
- ThinkPHP市場精選——企業(yè)建站專題
- ThinkPHP 提供統(tǒng)一API接口服務
- ThinkPHP市場精選——直播電商專題
- ThinkAPI服務SDK發(fā)布
- 官方服務市場啟用獨立子域名
- ThinkPHP市場精選——刷臉支付專題
- ThinkAPI推出會員服務計劃
- ThinkPHPV6.0.4版本發(fā)布——中秋國慶雙節(jié)快樂
- ThinkPHPV5.1.40版本發(fā)布——常規(guī)更新
- 1024程序員節(jié)福利走一波
- ThinkPHP V6.0.5版本發(fā)布——兼容Composer2.0
- 知識圖譜應用場景——源論技術(shù)沙龍
- ThinkPHP5.*版本改進Composer2.0的兼容
- 官方市場雙十一精選推薦
- 技術(shù)人做產(chǎn)品有機會么(文末送課程)
- 本周秒殺——古德云售后獲客營銷系統(tǒng)
- ThinkAPI服務更新——支持接口分組和PHP版本依賴調(diào)整
- PHP8新特性盤點
- PHP8新特性系列:構(gòu)造器屬性提升使用及注意事項
- ThinkPHP2021新年寄語
- ThinkPHP V6.0.6&V5.1.41版本發(fā)布——兼容PHP8.0
- PHP如何更優(yōu)雅地調(diào)用API接口
- ThinkPHP V6.0.7發(fā)布——修正版本
- ThinkAPI服務更新——IP白名單
- 最新版ThinkORM對于時間字段的調(diào)整
- ThinkAPI短信接口正式上線
- ThinkPHP V6.0.8版本發(fā)布——多環(huán)境變量配置支持
- 頂想云寫作服務開啟第一次公測
- ThinkSSL上線——官方SSL/TLS證書服務
- MDBootstrap國內(nèi)用戶福利——ThinkPHP官方市場首發(fā)
- ThinkPHP V6.0.9版本發(fā)布——常規(guī)更新
- ThinkORM功能盤點——虛擬模型
- 全面支持主流GIT版本庫——云寫作服務第二次公測
- 云寫作服務私有化部署方案之:版本庫私有化
- 看云雙十一活動
- ThinkPHP V6.0.10LTS發(fā)布——兼容PHP8.1
- ThinkPHP V6.0.12發(fā)布——命令行兼容8.1
- 頂想云知識管理上線公測——構(gòu)建企業(yè)文檔中心和知識庫
- 頂想云上線——助力生態(tài)數(shù)字化建設(shè)
- 618活動進行中——官方市場迎來一波更新
- 頂想云知識管理正式上線——看云文檔啟動遷移服務
- ThinkPHP V6.0.13發(fā)布——常規(guī)更新
- 頂想云網(wǎng)站助理服務上線——構(gòu)建產(chǎn)品支持服務
- ThinkPHP發(fā)布6.1.0&6.0.14版本——安全更新
- ThinkPHP新版社區(qū)上線試運營
- ThinkAPI上架人臉核身接口——助力網(wǎng)站實名認證
- 辭舊迎新——舊版社區(qū)停止注冊及發(fā)帖
- ThinkPHP6.1.2版本發(fā)布——兼容PHP8.2
