發行說明
- 支援策略
- Eloquent HasOneThrough 關聯關係
- 自動尋找模型策略
- 多個廣播認證看守器
- Token Guard 令牌雜湊演算法
- 改進Email 驗證器
- 預設定時任務時區
- 中間表/pivot 模型事件
- #Artisan 呼叫改進
- Mock / Spy 測試輔助方法
- Eloquent 資源鍵保持
- #高階orWhere Eloquent 方法
- Artisan Serve 改進
- 範本檔案對映
- DynamoDB 快取/ Session 驅動程式
- Carbon 2.0 支援
- Pheanstalk 4.0 支援
發行說明
- 版本控制方案
- 支援策略
- Laravel 5.8
版本控制方案
Laravel 的版本控制方案使用以下約定:
主版本號.次版本號.修訂號
。次版本號框架每六個月(二月和八月)發布,而修訂號版本可能每週發布一次,修訂號版本 不 包含重大變更。當你從應用程式中或在套件中引用Laravel 框架或其他元件時,應該始終使用版本約束,例如
5.7.*
,因為Laravel 的次要版本包含重大更改。但是,我們會努力確保你可以在一天或更短時間內完成更新。主要版本之間的發布往往需要很多年,每次發布代錶框架架構和底層結構發生了根本的改變。而目前並沒有準備開發主版本號的計畫。
支援策略
對於 LTS 版本,例如 5.5,提供兩年的錯誤修復和三年的安全修復。這些版本提供最長時間的支援和維護。對於一般版本,則只是提供六個月的錯誤修復和一年的安全修復。
#版本 發佈時間 Bug 修復截止時間 安全修復截止時間 5.0 2015 年2 月4 日 2015 年8 月4 日 2016 年2 月4 日 5.1 (LTS) 2015 年6 月9 日 2017 年6 月9 日 2018 年6 月9日 5.2 2015 年12 月21 日 2016 年6 月21 日 2016 年12 月21 日 5.3 2016 年8 月23 日 2017 年9 月23 日 2017 年8 月23 日 5.4 2017 年1 月24 日 2017 年7 月24 日 2018 年1 月24 日 5.5 (LTS) 2017 年8 月30 日 2019 年8 月30 日 2020 年8 月30 日 5.6 2018 年2 月7 日 2018 年8 月7 日 2019 年2 月7 日 5.7 2018 年9 月4 日 2019 年3 月4 日 2019 年9 月4 日 5.8 2019 年2 月26 日 2019 年8 月26 日 2020 年2 月26 日 Laravel 5.8
Laravel 5.8 在Laravel 5.7 的基礎上繼續進行最佳化,包括引入新的Eloquent 關聯關係(has-one-through)、優化郵箱驗證、基於約定的授權策略類別自動註冊、 DynamoDB 快取及Session 驅動、最佳化任務調度器的時區配置、支援分配多個認證guard 到廣播頻道、PSR-16 快取驅動規範、最佳化
artisan serve
指令、支援PHPUnit 8.0、支援Carbon 2.0 、支援Pheanstalk 4.0 ,以及多個bug 修復和可用性的提升。Eloquent
HasOneThrough
關聯關係Eloquent 現在提供了對
hasOneThrough
關聯類型的支援。例如,假設Supplier 模型類別與Account 模型類別之間是一對一關聯,且Account 模型類別與AccountHistory 模型類別之間也是一對一關聯,那麼Supplier 模型類別與AccountHistory 模型類別之間可以透過hasOneThrough##hasOneThrough##hasOneThrough
方法是基於Account 模型類別建立遠層的一對一關聯。你可以用hasOneThrough
關聯關係透過Account 模型類別存取AccountHistory 模型類別:/** * Get the account history for the supplier. */ public function accountHistory() { return $this->hasOneThrough(AccountHistory::class, Account::class); }
自動尋找模型策略
當使用Laravel 5.7 時,每個模型對應的認證策略都需要被明確地註冊到應用的
AuthServiceProvider
中:/** * 当前应用的策略对应关系 * * @var array */ protected $policies = [ 'App\User' => 'App\Policies\UserPolicy', ];
Laravel 5.8 引進了模型策略的自動尋找,只要模型和策略的命名符合Laravel 的標準約定。即策略必須在
Policies
路徑下,該路徑之上包含模型。舉個例子,模型可能放在app
路徑下,則策略可以在放app/Policies
路徑下。另外,策略名稱必須符合模型名稱並且加上Policy
後綴。這樣,User
模型將會對應上UserPolicy
類別。如果你想要提供自己的策略尋找邏輯,你可以使用
Gate::guessPolicyNamesUsing
方法來註冊一個自訂的回呼函數。通常來說,這個方法應該從你應用的AuthServiceProvider
中被呼叫:use Illuminate\Support\Facades\Gate; Gate::guessPolicyNamesUsing(function ($modelClass) { // return policy class name... });
{note} 任何被明確地對應到
AuthServiceProvider
中的策略都將優先於隱式自動尋找策略。PSR-16 快取規格
為了在儲存快取項目時允許更細粒度的過期時間並遵守PSR-16 快取標準,我們將快取項目的有效期限單位從分鐘調整到秒。
Illuminate\Cache\Repository
及其擴充類別的put
、putMany
、add
、remember
和setDefaultCacheTime
方法以及每個快取儲存實作類別的put
方法對應的有效期限單位都做了這樣的調整。可以查看 相關的 PR 以了解更多細節。如果你的程式碼中呼叫了上述方法,需要對相應程式碼進行更新以確保現在傳遞的有效期時間與之前一致(單位變成了秒,而不是之前的分鐘),作為替代方案,你還可以傳遞一個
DateTime
實例來識別快取項目的過期時間:// Laravel 5.7 - 缓存30分钟... Cache::put('foo', 'bar', 30); // Laravel 5.8 - 缓存30秒... Cache::put('foo', 'bar', 30); // Laravel 5.7 / 5.8 - 缓存30秒... Cache::put('foo', 'bar', now()->addSeconds(30));
多個廣播認證看守器
在Laravel 之前發行的版本中,私有和到場廣播頻道透過套用的預設認證guard 對使用者進行認證。從Laravel 5.8 開始,你可以分配多個guard 來對請求進行認證:
Broadcast::channel('channel', function() { // ... }, ['guards' => ['web', 'admin']])
Token Guard 令牌雜湊演算法
Laravel 中提供基本API 認證的
token
guard,現在支援以SHA-256 雜湊演算法對API 令牌進行儲存。這比儲存純文字令牌更加安全。若要了解更多有關雜湊令牌的細節,請查閱完整的 API 認證文件。註: 即使Laravel 提供了一個關簡單的、基於令牌的認證guard ,考慮到健壯性和提供了API 認證的線上應用,我們強烈推薦你使用Laravel Passport 。
改進 Email 驗證器
Laravel 5.8 採用了 SwiftMailer 的
egulias/email-validator
包,改進了 email 驗證器的驗證邏輯。先前的 Laravel Email 驗證邏輯認為有效的郵件地址,例如example@bär.se
,現在可能會被判定無效。預設定時任務時區
Laravel 允許使用者使用
timezone
方法來自訂定時任務的時區:$schedule->command('inspire') ->hourly() ->timezone('America/Chicago');
如果你為每個定時任務都定義一個時區的話,這樣會比較繁瑣與麻煩。更簡單的方法是在
app/Console/Kernel.php
檔案內定義一個schedule Timezone
方法。這個方法會將預設時區傳回給所有的定時任務:/** * 获取默认定时任务时区。 * * @return \DateTimeZone|string|null */ protected function scheduleTimezone() { return 'America/Chicago'; }
中間表/pivot 模型事件
在先前版本的Laravel 中,當附著,分開或同自訂中間表/ 多對多關係的「pivot」 模型時Eloquent 模型事件不會被派遣。在現在的 Laravel 5.8 中,使用 自訂中間表模型 時,這些事件都會被派遣。
Artisan 呼叫改進
Laravel 允許你透過
Artisan::call
方法來呼叫 Artisan 。在先前發布的 Laravel 中,命令的選項是透過一個陣列作為第二個參數來傳遞到方法中的:use Illuminate\Support\Facades\Artisan; Artisan::call('migrate:install', ['database' => 'foo']);
然而,Laravel 5.8 允許你傳遞完整的命令,包括其選項。它將作為第一個字串參數到方法:
Artisan::call('migrate:install --database=foo');
Mock / Spy 測試輔助方法
為了創建模擬物件更加方便, 新的
mock
和spy
方法已經加入到基礎Laravel 測試用例中。這些方法自動的綁定模擬類別到容器中。例如:// Laravel 5.7 $this->instance(Service::class, Mockery::mock(Service::class, function ($mock) { $mock->shouldReceive('process')->once(); })); // Laravel 5.8 $this->mock(Service::class, function ($mock) { $mock->shouldReceive('process')->once(); });
Eloquent 資源鍵保持
當從路由傳回 Eloquent 資源集合 時, Laravel 會重置集合的鍵以使他們按簡單的數字順序排列:
use App\User; use App\Http\Resources\User as UserResource; Route::get('/user', function () { return UserResource::collection(User::all()); });
當使用 Laravel 5.8 時, 你可以新增一個
preserveKeys
屬性到資源類別表示資源類別的鍵是否保留。預設情況下,為了和先前版本的Laravel 保持一致,這些鍵會被重設:<?php namespace App\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; class User extends JsonResource { /** * Indicates if the resource's collection keys should be preserved. * * @var bool */ public $preserveKeys = true; }
當
preserveKeys
的屬性值設定為true
# 時,集合鍵會被保留:
use App\User; use App\Http\Resources\User as UserResource; Route::get('/user', function () { return UserResource::collection(User::all()->keyBy->id); });
高階
orWhere
Eloquent 方法在先前發布的Laravel 中,透過
or
query 運算子來合併多個Eloquent 模型作用域須使用閉包回呼:// scopePopular 和 scopeActive 方法定义在 User 模型中... $users = App\User::popular()->orWhere(function (Builder $query) { $query->active(); })->get();
Lavavel 5.8 引進了「高階」
orWhere方法,讓你可以不用閉包,從而實現對作用域的流暢鏈式調用。
serve
Artisan Serve 改進$users = App\User::popular()->orWhere->active()->get();
在先前發布的 Laravel 中,Artisan 的
serve
方法會啟動你的應用程式服務,監聽8000
連接埠。如果一個serve
命令進程已經啟動並佔用了這個端口,那麼透過serve
命令嘗試啟動第二個應用程式服務將會失敗。從 Laravel 5.8 起,會掃描可用的連接埠直到
8009,讓你可以同時啟動多個應用程式服務。
模板檔案映射
當編譯 Blade 模板時,Laravel 現在會在編譯檔案的頂部添加註釋,其中包含原始 Blade 模板路徑。
DynamoDB 快取 / Session 驅動程式
Laravel 5.8 引進了 DynamoDB 快取和 session 驅動程式。 DynamoDB 是 Amazon Web Services 提供的無伺服器 NoSQL 資料庫。預設的
dynamodb快取驅動配置可以在 Laravel 5.8 的 快取設定檔 中找到。
Carbon 2.0 支援
Laravel 5.8 提供對 Carbon 日期處理庫
~2.0發行版本的支援。
~4.0Pheanstalk 4.0 支援
Laravel 5.8 提供對 Pheanstalk 佇列庫
發行版本的支援。如果你的應用程式正在使用 Pheanstalk 函式庫,請透過 Composer 升級該函式庫到 ~4.0 發行版。
- Laravel 5.8
- PSR-16 快取規格