2025 年必須嘗試的 5 個 Laravel 新特性
2025 年必須嘗試的 5 個 Laravel 新特性
引言
Laravel 一直在向世人證明,為什么它是最受歡迎的 PHP 框架之一。每一次版本更新,都能帶來讓日常開發更順手、更干凈、也更高效的新能力。如果你還沒來得及研究最近的改動,下文這 5 個全新特性 值得你馬(ma)上關(guan)注——從(cong)更(geng)聰明(ming)的事務回滾(gun)回調,到更(geng)干凈的資源定(ding)義方式,統(tong)統(tong)幫你減輕心智負擔。
1. afterRollback(): 事務失敗時的自動響應
你大概已經習慣用 DB::transaction() 來保證數據一致性,對吧?Laravel 現在在事務工具箱里塞進了一個新幫手 —— afterRollback()。它會在事務失敗時自動(dong)觸(chu)發,讓(rang)你不需(xu)要額外寫 try-catch 就能處理清理、記錄日志或發送通(tong)知等(deng)動(dong)作。
use Illuminate\Support\Facades\DB;
DB::transaction(function () {
DB::afterCommit(function () {
// 事務提交成功時執行
});
DB::afterRollback(function () {
// 事務回滾時執行
});
// 你的事務性代碼...
});
這個特性自 Laravel v12.32.0 起(qi)可用(yong)。簡單好用(yong),尤其(qi)適合在回滾后記(ji)錄日志、寫(xie)入審(shen)計(ji)記(ji)錄或清理(li)臨時數據,再(zai)也(ye)不用(yong)在事務塊外(wai)層手動兜底。
2. Request Batching:一口氣處理多個 HTTP 請求
一次性發起多個 HTTP 請求,現在變得更簡潔了。借助全新的 Request Batching,你可以(yi)優雅地收集(ji)多個調用并統(tong)一(yi)發送(song),同時在(zai)生命周(zhou)期的不同階段加入回調。
use Illuminate\Http\Client\Batch;
use Illuminate\Support\Facades\Http;
Http::batch(function (Batch $batch) {
return [
$batch->get('//batch.example/one'),
$batch->get('//batch.example/two'),
$batch->get('//batch.example/three'),
];
})
->before(fn (Batch $b) => logger()->info("Batch created with {$b->totalRequests} requests"))
->progress(fn (Batch $b, $key, $response) => logger()->info("Request {$key} finished!"))
->then(fn () => logger()->info("All requests completed!"))
->send();
你(ni)甚至可以給(gei)每個(ge)請求命名,方(fang)便后續讀取:
$responses = Http::batch(fn (Batch $b) => [
$b->as('users')->get('//api.example.local/users'),
$b->as('orders')->get('//api.example.local/orders'),
])->send();
$users = $responses['users']->json();
對比以前需要手寫 Http::pool() 并循環(huan)處理(li)響應,Batching 讓流程更(geng)(geng)清晰、結構更(geng)(geng)穩定,也更(geng)(geng)易于維護。
3. Dynamic Wheres:更優雅的條件查詢
一個不大卻格外順手的改進:Eloquent 現在可以通過 動態 where 方法 來組合條件。過去你可能這么寫:
// 以前
$order = Order::where('invoice', '123')->where('status', 'pending')->first();
// 現在
$order = Order::whereInvoiceAndStatus('123', 'pending')->first();
Laravel 會自動解析方(fang)法名并拼(pin)接對應的查(cha)詢條件。小改動,大順手(shou),讓鏈式查(cha)詢的表(biao)達更貼近自然(ran)語(yu)言。
但個人建議不要使用(yong),太魔法(fa),不利于后期代(dai)碼維護
4. 登錄后的自動重定向
登錄后的重定向體驗也被打磨得更絲滑。借助 redirect()->intended(),你可以(yi)輕松把用戶送(song)回他們原本想(xiang)訪問的頁面(mian):
// middleware
return redirect()->guest(route('admin.login'))->with('error', 'Please login first');
// after login
return redirect()->intended('/admin/dashboard');
Laravel 會自(zi)動記住用戶(hu)登錄前嘗試訪問的地址,并在認證成功后送他們回去。體驗更連(lian)貫,不需要額外(wai)維(wei)護 session 或 query 參數。
5. 模型資源的 PHP Attributes,讓定義更簡潔
以前要(yao)把模(mo)型轉成資源,需要(yao)每次(ci)顯式指(zhi)定資源類:
// Before
$userData = $user->toResource(UserProfileResource::class);
$userList = $userCollection->toResourceCollection(UserCollectionResource::class);
現在,Laravel 允許你在模型上用 PHP Attributes 直(zhi)接聲明(ming)默認資源:
// Now
#[UseResource(UserDetailResource::class)]
#[UseResourceCollection(UserListResource::class)]
class User extends Model
{
protected $fillable = ['name', 'email', 'profile_picture', 'bio'];
}
$userData = $user->toResource();
$userList = $userCollection->toResourceCollection();
告(gao)別重復的(de)樣(yang)板代碼。在(zai)大型項目里(li)尤為有用:資(zi)源映射統(tong)一放在(zai)模型上(shang),邏輯更(geng)集中、調用也更(geng)干凈(jing)。
總結
這 5 個(ge) Laravel 新功能看似輕量,卻能在日常開(kai)發中帶來扎(zha)實的效率提升:
afterRollback()讓事務失敗后的補救動作自動化;- Request Batching 用一套更優雅的語法覆蓋多請求場景;
- Dynamic Wheres 讓條件查詢讀起來更像自然語言;
- 登錄自動重定向提升了用戶體驗;
- 用 PHP Attributes 聲明資源,讓模型與資源的銜接更順暢。
Laravel 一如(ru)既(ji)往地在(zai)提升(sheng)開發者(zhe)體驗(yan)上持續(xu)打磨,而不(bu)會引入不(bu)必要的復雜度(du)。
