### 2019 年 6 月 3 日 發布
RC3版本主要改進和優化了系統內置中間件,改進了一些用法和體驗,并且把不常用的驅動移出核心改為擴展方式提供。
## 主要新特性
### 增加`whereWeek`日期查詢
~~~
// 查詢本周文章
Article::whereWeek('create_time')->select();
// 查詢上周文章
Article::whereWeek('create_time', 'last week')->select();
// 查詢2019-1-1到2019-1-7的文章
Article::whereWeek('create_time', '2019-1-1')->select();
~~~
### 自增ID獲取支持類型自動轉換
自增ID獲取的時候會根據主鍵的字段類型自動轉換處理,而不是PDO默認返回的字符串類型。
### 當前請求記錄匹配路由規則
記錄當前請求的路由規則對象,可以通過
~~~
$request->rule();
~~~
獲取當前請求實際匹配的路由規則對象
### 增加`requireWithout`驗證規則
表示當某個字段沒有數據的時候必須,可以組合完成表單中某兩個字段必須填寫一項的驗證,例如:
~~~
'phone' => 'requireWithout:mobile',
'mobile'=> 'requireWithout:phone',
~~~
優化路由ext和name方法以及URL生成
### 增加項目自定義類
取消了內置的`think\Controller`控制器基類,在項目中提供了`app\BaseController`控制器基類更方便自定義。
另外項目還提供了`app\Request`自定義請求類,可以自定義應用所需的請求方法和屬性。提供了`app\ExceptionHandle`自定義異常處理類
,方便對異常進行自定義接管處理。
### URL生成使用對象方式操作
Route類`buildUrl`及`url`助手函數返回類型改為`think\route\Url`對象實例而不是字符串,由于定義了`__toString`方法,因此可以在模板中直接輸出為URL字符串。
~~~
echo url('index/hello',['name'=>'think'])->suffix('htm')->domain('blog');
~~~
### 修改器改進
改進修改器方法支持不返回任何數據,而是在修改器中直接設置數據
例如:
~~~
class User extends \think\Model
{
public function setField1Attr($value,$data){
$this->set('field2', $data['field2']);
$this->set('field3', $data['field3']);
}
}
$user = new User;
$user->field1 = 'value1';
$user->save();
~~~
實際寫入數據庫的時候不會包含`field1`字段數據,但會包含`field2`和`field3`的數據。
### `dump`/`halt`助手函數調整支持輸出多個變量
你可以使用
~~~
dump($var1,$var2,...)
~~~
方式輸出多個變量調試,同樣`halt`方法也可以支持調試多個變量輸出并中止執行。
最新版本會在安裝項目的時候安裝`symfony/var-dumper`擴展替換內置的`dump`助手函數,因此你可以進行更強大的輸出
### 關聯自動更新
關聯`together`方法自動更新和刪除的時候可以無需使用`with
`
例如,之前的寫法
~~~
$article = Article::with('comments')->find(1);
$article->together(['comments'])->delete();
~~~
現在可以直接寫成
~~~
$article = Article::find(1);
$article->together(['comments'])->delete();
~~~
### 模型數據集增加`delete`和`update`方法
可以批量對數據集進行更新和刪除操作(支持模型事件)
~~~
// 更新今天的數據
$list = Article::whereDay('create_time')->select();
$list->update(['is_new'=>1]);
// 刪除昨天的數據
$list = Article::whereDay('create_time', 'yesterday')->select();
$list->delete();
~~~
### 模型支持表后綴以及動態切換
~~~
<?php
namespace app\model;
use think\Model;
class Blog extends Model
{
// 定義默認的表后綴(默認查詢中文數據)
protected $suffix = _cn';
}
~~~
模型提供了動態切換方法`switch`和`setSuffix`,例如:
```
// switch方法用于靜態查詢
Blog::switch('_en')->find();
// setSuffix用于動態設置
$blog = new Blog($data);
$blog->setSuffix('_en')->save();
```
### 注解路由支持給某個路由指定所屬分組
在注解中定義路由分組,可以使用
~~~
<?php
namespace app\controller;
/**
* @group('blog')
*/
class Blog
{
/**
* @param string $name 數據名稱
* @return mixed
* @route('hello/:name','get')
*/
public function hello($name)
{
return 'hello,'.$name;
}
}
~~~
當前控制器中的注解路由會自動加入`blog`分組下面,最終,會注冊一個`blog/hello/:name`的路由規則。你一樣可以對該路由分組設置公共的參數,例如:
~~~
<?php
namespace app\controller;
/**
* @group('blog')->ext('html')
* ->pattern(['id' => '\d+', 'name' => '\w+'])
*
*/
class Blog
{
/**
* @param string $name 數據名稱
* @return mixed
* @route('hello/:name','get')
*/
public function hello($name)
{
return 'hello,'.$name;
}
}
~~~
如果你已經在路由定義文件中定義了`blog`分組,也可以直接把某個路由加入該分組,例如:
~~~
<?php
namespace app\controller;
class Blog
{
/**
* @param string $name 數據名稱
* @return mixed
* @route('hello/:name','get')->group('blog')
*/
public function hello($name)
{
return 'hello,'.$name;
}
}
~~~
### 多語言支持分組定義
你可以在定義多語言的時候使用分組定義
~~~
return [
'user' => [
'welcome' => '歡迎回來',
'login' => '用戶登錄',
'logout' => '用戶登出',
]
];
~~~
然后使用下面的方式獲取多語言變量
~~~
Lang::get('user.login');
lang('user.login');
~~~
### 支持自定義加載語言文件
可以通過`extend_list`設置,例如:
~~~
'extend_list' => [
'zh-cn' => [
app()->getBasePath() . 'lang\zh-cn\app.php',
app()->getBasePath() . 'lang\zh-cn\core.php',
],
]
~~~
便于在擴展中自定義語言包
,并且現在已經支持語言文件使用`YML`格式定義
### 緩存標簽改進
增加`TagSet`類,`tag`方法支持傳入數組,同時對多個標簽進行操作
~~~
Cache::tag('tag')->set('name1','value1');
Cache::tag('tag')->set('name2','value2');
// 清除tag標簽的緩存數據
Cache::tag('tag')->clear();
~~~
并支持同時指定多個緩存標簽操作
~~~
Cache::tag(['tag1', 'tag2'])->set('name1', 'value1');
Cache::tag(['tag1', 'tag2'])->set('name2', 'value2');
// 清除多個標簽的緩存數據
Cache::tag(['tag1','tag2'])->clear();
~~~
可以追加某個緩存到標簽
```
Cache::tag('tag')->append('name3');
```
### 緩存類增加`push`方法
增加元素到一個數組緩存
```
Cache::set('name', [1,2,3]);
Cache::push('name', 4);
Cache::get('name'); // [1,2,3,4]
```
### Cookie保存時間支持DateTimeInterface
### 增加表單令牌中間件
### 控制器支持__call方法
### 增加`deny_app_list`配置參數
可以配置禁止直接訪問的應用列表
### 控制器中間件改進
控制器中間件的`only`和`except`定義不區分大小寫
### `app_map`支持指定泛應用映射
可以在`app_map`配置中定義泛應用解析到指定應用,例如:
~~~
'app_map' => [
'think' => 'admin', // 把admin應用映射為think
// ... 其它應用映射定義
'*' => 'home', // 其它應用解析到home
],
~~~
## 問題修正
* 修正參數綁定的浮點型精度問題
* 修正軟刪除
* 修正模型的數據庫連接
* 修正`RedirectResponse
`
* 修正Session類`flush`方法
* 修正JSON字段參數綁定
* 修正`make:controller`指令生成
* 修正Cache類的`get`方法默認值
* 修正域名綁定
* 修正關聯模型的動態獲取器
* 修正模型`dateFormat`屬性方法
* 修正url生成對多入口的支持
* 修正ini配置文件格式的布爾值轉換問題
* 修正路由延遲解析全局配置無效的問題
* 修正路由緩存問題
* 修正關聯`update`操作
* 修正`Relation::$selfRelation`默認為`null`,導致`Relation::isSelfRelation()`方法報錯
* 修正`redis`緩存驅動
* 修正事件智能訂閱`observe`方法
* 修正模型字段定義對日期查詢無效的問題
* 修正Console類`getNamespaces`方法
* 修正`where`查詢方法傳入Query對象的時候缺少`bind`數據的問題
* 修正request類`method`方法
* 修正`route:list`指令
* 修正`Collection`類`load`方法
* 修正`redis`驅動的端口類型
* 修正`session`數據序列化使用JSON處理的問題
* 修正分組路由合并解析
* 修正模型的`hidden`方法隱藏關聯模型的問題
* 修正關聯查詢關聯鍵為空的錯誤
* 修正返回204狀態碼的響應判斷
* 修正`Request`類`has`方法對`env`和`session`的支持
* 修正`provider.php`文件無效問題
* 修正關聯查詢的部分問題
* 修正`validate`助手函數支持指定驗證器類
* 修正驗證類`getValidateType`方法
* 修正入口單獨開啟調試模式
* 修正加載`Composer`應用
## 用法調整
* 頁面`trace`中間件僅在調試模式有效
,并且無需設置環境變量
* `Socket`日志驅動移出核心
* `PostgreSQL`、`Sqlite`和`SqlServer`驅動移出核心,改為擴展
* 取消內置`think\Controller`基類
* `Yaconf`支持移出核心 納入擴展`think-yaconf
`
* 字段排除改為`withoutField`方法
* 取消`useGlobalScope`方法增加`withoutGlobalScope`方法
* 更改默認生成的中間件位置
* 加載默認語言包無需開啟多語言中間件
* `Cookie`類恢復`get`和`has`方法支持
* `token`助手函數調整
* 全局請求緩存參數調整
* 統一中間件調用傳參,不支持`:`分割傳參
* 緩存數據統一進行序列化后存儲
* `Cache`類`rm`方法更改為`delete`方法
* `validate`助手函數返回`Validate`對象實例而不是數據驗證
## 廢棄用法
* 取消多語言的`auto_detect`配置
* 取消`session`類的`auto_start`配置參數和`boot`方法
* 廢棄`Where`數組對象查詢
* 取消模型事件觀察者
* 取消`JumpResponse`及`success`/`error`/`result`等方法和助手函數
* 取消表達式查詢解析擴展及`think\db\Expression`類
* 廢棄模型自動完成功能,使用模型事件替代
* 取消`cookie`的`prefix`參數
* 取消一系列不推薦使用的助手函數
* 取消`optimize:facade` `optimize:model`指令 改為擴展方式
* 取消命令行執行URL
* 刪除`Config`類`__get` 和 `__isset` 方法
- 值得升級到5.1的18個理由
- 5.1.7版本新特性
- JSON字段類型在ORM中的使用
- 文件下載響應對象
- 教你使用5.1的數組對象查詢
- 模型三大利器之一:搜索器
- 在ThinkPHP中使用Yaconf
- 掌握命令行的表格輸出
- 5.1.25查詢參數綁定的改進
- ThinkPHP安全規范指引
- 巧用數據集的排序功能實現統計排序
- think-orm ——基于5.1的獨立ORM庫
- think-template——基于ThinkPHP的獨立模板引擎
- ThinkPHP5.1.26版本發布——修正版本,包含安全更新
- ThinkPHP5.0和3.2再發安全更新
- 官宣:ThinkPHP發布首個LTS版本
- 你真的了解Db類和模型的正確使用姿勢么?
- 如何更有效的記錄和管理日志
- 模型三大利器之二:修改器
- ThinkPHP5.1.28版本發布——修正上一版本問題,改進關聯查詢
- 模型三大利器之三:獲取器
- API版本控制的幾種思路
- ThinkPHP5.2第一個Beta版本發布測試
- 讓你少犯錯的數據查詢基本原則
- ThinkPHP發布5.1.29版本——常規更新
- 這15個好習慣讓你更容易升級到5.2
- 如何有效提高ThinkPHP的應用性能
- 讓你提高開發效率的查詢技巧
- 模型關聯查詢不完全指南
- 5.2發布Beta2版本——統一和精簡大量用法
- ThinkPHP發布5.1.30版本——支持微秒時間字段寫入
- ThinkPHP的數據緩存使用
- ThinkPHP5.2安裝及入口文件
- ThinkPHP榮獲2018 年度最受歡迎中國開源開發框架第1名
- 5.1路由使用心得技巧
- ThinkPHP5.*版本發布安全更新
- ThinkPHP項目及代碼規范指北
- 5.2版本的設計規范指導
- ThinkPHP5.1.32版本發布——圣誕快樂
- 利用Trait特性給模型增加樂觀鎖功能
- 5.2數據庫和模型的變化(摘要)
- ThinkPHP模板引擎實現和常見問題
- ThinkPHP5.0.24版本發布——安全更新
- 不忘初心,方得始終——ThinkPHP十三周年報告
- ThinkPHP5+相關資源匯總
- 異步社區ThinkPHP周年慶專享優惠活動
- 5.2路由的調整和改進
- ThinkPHP發布5.1.33版本——包含安全更新
- ThinkPHP擴展開發指南
- ThinkPHP發布5.2Beta3版本
- ThinkPHP發布5.1.34版本——喜迎新年
- ThinkPHP發布5.2RC1版本
- ThinkPHP發布5.1.35版本——常規更新
- 5.2配置類的調整
- 5.2時間查詢的改進和優化
- 5.2RC版本升級不完全指導(僅供學習參考)
- ThinkPHP5.2版本正式變更為6.0版本
- ThinkPHP百度云云虛擬主機專享免費活動
- 事件系統以及查詢事件、模型事件的使用
- ThinkPHP6.0RC2版本發布——架構升級、精簡核心
- ThinkPHP5.1.36LTS版本發布——常規更新
- 新版Session和Cookie設計變化
- ThinkPHP5.1.37版本發布——常規更新
- ThinkPHP6.0RC3版本發布——細節完善,體驗優化
- 6.0中間件使用詳解
- Composer各大廠商鏡像地址
- ThinkPHP6.0發布計劃公告
- 「ThinkPHP開發者周刊」招募志愿者
- ThinkPHP6.0日志變化
- ThinkPHP5.1.38版本發布——常規更新
- ThinkPHP6.0RC4版本發布——ORM獨立,日志多通道支持
- ThinkORM2.0開發指南上線
- ThinkPHP6.0RC5版本發布——多應用模式獨立,中間件機制調整
- ThinkPHP6.0版本發布——程序員節福利
- ThinkPHP5.1.39LTS版本發布——常規更新
- ThinkPHP6.0.1版本發布——圣誕快樂!
- 回顧2019,展望2020!
- ThinkPHPV6.0.2版本發布——2020新春快樂!
- 周年福利系列:Swoole合作優惠
- 億速云成為ThinkPHPV6.0獨家贊助發布商??
- 新冠疫情工具和限免資源專題(保持更新中)
- 周年福利系列:創宇信用認證合作優惠
- 周年福利系列:碼云企業版限時10%優惠
- 周年福利系列:想天短說抵現優惠
- think-swoole直播:從零開始掌握swoole開發
- 周年福利系列:B2C開源電商ShopXO授權8折優惠
- 周年福利系列:LayuiAdmin 永久授權限時優惠
- ThinkPHP資源導航站上線——構建生態 服務未來
- ThinkPHP官方技術支持服務和應用服務市場上線公測
- ThinkPHP市場精選——推廣基本要素
- ThinkPHP市場精選——客服聊天專題
- ThinkPHPV6.0.3版本發布——端午安康
- ThinkPHP開發者扶持計劃
- 6.0.3版本關鍵更新及升級事項
- 「ThinkPHP開發者周刊」改版重啟
- ThinkPHP市場精選——企業建站專題
- ThinkPHP 提供統一API接口服務
- ThinkPHP市場精選——直播電商專題
- ThinkAPI服務SDK發布
- 官方服務市場啟用獨立子域名
- ThinkPHP市場精選——刷臉支付專題
- ThinkAPI推出會員服務計劃
- ThinkPHPV6.0.4版本發布——中秋國慶雙節快樂
- ThinkPHPV5.1.40版本發布——常規更新
- 1024程序員節福利走一波
- ThinkPHP V6.0.5版本發布——兼容Composer2.0
- 知識圖譜應用場景——源論技術沙龍
- ThinkPHP5.*版本改進Composer2.0的兼容
- 官方市場雙十一精選推薦
- 技術人做產品有機會么(文末送課程)
- 本周秒殺——古德云售后獲客營銷系統
- ThinkAPI服務更新——支持接口分組和PHP版本依賴調整
- PHP8新特性盤點
- PHP8新特性系列:構造器屬性提升使用及注意事項
- ThinkPHP2021新年寄語
- ThinkPHP V6.0.6&V5.1.41版本發布——兼容PHP8.0
- PHP如何更優雅地調用API接口
- ThinkPHP V6.0.7發布——修正版本
- ThinkAPI服務更新——IP白名單
- 最新版ThinkORM對于時間字段的調整
- ThinkAPI短信接口正式上線
- ThinkPHP V6.0.8版本發布——多環境變量配置支持
- 頂想云寫作服務開啟第一次公測
- ThinkSSL上線——官方SSL/TLS證書服務
- MDBootstrap國內用戶福利——ThinkPHP官方市場首發
- ThinkPHP V6.0.9版本發布——常規更新
- ThinkORM功能盤點——虛擬模型
- 全面支持主流GIT版本庫——云寫作服務第二次公測
- 云寫作服務私有化部署方案之:版本庫私有化
- 看云雙十一活動
- ThinkPHP V6.0.10LTS發布——兼容PHP8.1
- ThinkPHP V6.0.12發布——命令行兼容8.1
- 頂想云知識管理上線公測——構建企業文檔中心和知識庫
- 頂想云上線——助力生態數字化建設
- 618活動進行中——官方市場迎來一波更新
- 頂想云知識管理正式上線——看云文檔啟動遷移服務
- ThinkPHP V6.0.13發布——常規更新
- 頂想云網站助理服務上線——構建產品支持服務
- ThinkPHP發布6.1.0&6.0.14版本——安全更新
- ThinkPHP新版社區上線試運營
- ThinkAPI上架人臉核身接口——助力網站實名認證
- 辭舊迎新——舊版社區停止注冊及發帖
- ThinkPHP6.1.2版本發布——兼容PHP8.2