歡迎您光臨本站 註冊首頁

ThinkPHP 6.0 RC 3 版本發布,細節完善,體驗優化

←手機掃碼閱讀     admin @ 2019-06-03 , reply:0

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類buildUrlurl助手函數返回類型改為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欄位數據,但會包含field2field3的數據。

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();

模型數據集增加deleteupdate方法

可以批量對數據集進行更新和刪除操作(支持模型事件)


// 更新今天的數據
$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';
}

模型提供了動態切換方法switchsetSuffix,例如:


// 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配置參數

可以配置禁止直接訪問的應用列表

控制器中間件改進

控制器中間件的onlyexcept定義不區分大小寫

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指令
  • 修正Collectionload方法
  • 修正redis驅動的埠類型
  • 修正session數據序列化使用JSON處理的問題
  • 修正分組路由合併解析
  • 修正模型的hidden方法隱藏關聯模型的問題
  • 修正關聯查詢關聯鍵為空的錯誤
  • 修正返回204狀態碼的響應判斷
  • 修正Requesthas方法對envsession的支持
  • 修正provider.php文件無效問題
  • 修正關聯查詢的部分問題
  • 修正validate助手函數支持指定驗證器類
  • 修正驗證類getValidateType方法
  • 修正入口單獨開啟調試模式
  • 修正載入Composer應用

用法調整

  • 頁面trace中間件僅在調試模式有效
    ,並且無需設置環境變數
  • Socket日誌驅動移出核心
  • PostgreSQLSqliteSqlServer驅動移出核心,改為擴展
  • 取消內置think\Controller基類
  • Yaconf支持移出核心 納入擴展think-yaconf
  • 欄位排除改為withoutField方法
  • 取消useGlobalScope方法增加withoutGlobalScope方法
  • 更改默認生成的中間件位置
  • 載入默認語言包無需開啟多語言中間件
  • Cookie類恢復gethas方法支持
  • token助手函數調整
  • 全局請求緩存參數調整
  • 統一中間件調用傳參,不支持:分割傳參
  • 緩存數據統一進行序列化后存儲

廢棄用法

  • 取消多語言的auto_detect配置
  • 取消session類的auto_start配置參數和boot方法
  • 廢棄Where數組對象查詢
  • 取消模型事件觀察者
  • 取消JumpResponsesuccess/error/result等方法和助手函數
  • 取消表達式查詢解析擴展及think\db\Expression
  • 廢棄模型自動完成功能,使用模型事件替代
  • 取消cookieprefix參數
  • 取消一系列不推薦使用的助手函數
  • 取消optimize:facadeoptimize:model指令 改為擴展方式
  • 取消命令行執行URL
  • 刪除Config__get 和 __isset 方法

[admin ]

來源:OsChina
連結:https://www.oschina.net/news/107171/thinkphp-6-0-rc3-released
ThinkPHP 6.0 RC 3 版本發布,細節完善,體驗優化已經有349次圍觀

http://coctec.com/news/all/show-post-206409.html