干貨 – 2023年20個(gè) Laravel 新特性一文了解
Laravel,作為流行的PHP框架,自發(fā)布以來(lái)一直在不斷發(fā)展。隨著每個(gè)新版本的推出,Laravel都帶來(lái)了令人興奮的功能和改進(jìn),使Web開(kāi)發(fā)變得更加輕松高效。在本文中,我們將探討2023年你應(yīng)該了解的20個(gè)Laravel特性。
1、Blade組件
Blade組件允許你封裝UI邏輯并在整個(gè)應(yīng)用程序中重復(fù)使用。它們提供了一種清晰而模塊化的方式來(lái)組織視圖,使得你的代碼更易于維護(hù)。通過(guò)Blade組件,你可以創(chuàng)建可重用的UI元素,并使用簡(jiǎn)單的語(yǔ)法將它們包含在模板中。
<x-alert type="success"> 歡迎訪問(wèn)我的網(wǎng)站!</x-alert>
2、Livewire集成
Livewire是Laravel的全??蚣?,允許你構(gòu)建交互式UI組件而無(wú)需編寫(xiě)JavaScript。與Laravel緊密集成,你可以輕松創(chuàng)建實(shí)時(shí)更新的動(dòng)態(tài)UI元素,使你的應(yīng)用程序更具響應(yīng)性和用戶(hù)友好性。
class Counter extends Component{ public $count = 0; public function increment() { $this->count ; } public function render() { return view('livewire.counter'); }}
3、Laravel Sanctum
Laravel Sanctum為單頁(yè)應(yīng)用程序(SPA)、移動(dòng)應(yīng)用程序和簡(jiǎn)單的令牌-based API提供了輕量級(jí)且易于使用的身份驗(yàn)證系統(tǒng)。使用Sanctum,你可以輕松保護(hù)你的API并使用API令牌對(duì)用戶(hù)進(jìn)行身份驗(yàn)證。
use LaravelSanctumHasApiTokens;class User extends Authenticatable{ use HasApiTokens, Notifiable;}
4、Laravel Airlock
Laravel Airlock是Laravel提供的另一種身份驗(yàn)證系統(tǒng),專(zhuān)為SPA和移動(dòng)應(yīng)用程序設(shè)計(jì)。它允許你為身份驗(yàn)證目的發(fā)放API令牌,并提供了一種在不涉及會(huì)話(huà)相關(guān)功能的情況下對(duì)用戶(hù)進(jìn)行身份驗(yàn)證的簡(jiǎn)便方式。
use LaravelAirlockHasApiTokens;class User extends Authenticatable{ use HasApiTokens, Notifiable;}
5、任務(wù)批處理
任務(wù)批處理是Laravel 8中的新功能,允許你將多個(gè)任務(wù)分組到一個(gè)批處理中并并行執(zhí)行它們。當(dāng)處理大量任務(wù)時(shí),這可以顯著提高應(yīng)用程序的性能。
batch::dispatch([ new ProcessPodcast($podcast1), new ProcessPodcast($podcast2), new ProcessPodcast($podcast3),])->then(function (Batch $batch) { // 所有任務(wù)成功完成時(shí)執(zhí)行...})->catch(function (Batch $batch, Throwable $e) { // 處理批處理時(shí)發(fā)生錯(cuò)誤時(shí)執(zhí)行...});
6、模型工廠
Laravel的模型工廠允許你定義生成虛擬數(shù)據(jù)的藍(lán)圖。在編寫(xiě)測(cè)試或需要為開(kāi)發(fā)目的生成大量逼真數(shù)據(jù)時(shí),這非常有用。
use IlluminateDatabaseEloquentFactoriesFactory;class UserFactory extends Factory{ protected $model = User::class; public function definition() { return [ 'name' => $this->faker->name, 'email' => $this->faker->unique()->safeEmail, 'password' => bcrypt('password'), 'remember_token' => Str::random(10), ]; }}
7、Laravel Telescope
Laravel Telescope為你的Laravel應(yīng)用程序提供了一個(gè)美觀的調(diào)試助手。它使你能夠輕松檢查應(yīng)用程序的請(qǐng)求、查看數(shù)據(jù)庫(kù)查詢(xún)、監(jiān)視作業(yè)等等。Telescope是調(diào)試和優(yōu)化你的Laravel應(yīng)用程序的有價(jià)值工具。
8、Laravel Echo
Laravel Echo是一個(gè)JavaScript庫(kù),使在Laravel應(yīng)用程序中使用WebSockets變得簡(jiǎn)單。它提供了一個(gè)簡(jiǎn)單而優(yōu)雅的API,用于通過(guò)WebSocket連接發(fā)送和接收事件,從而使你能夠構(gòu)建實(shí)時(shí)功能,如聊天、通知和實(shí)時(shí)更新。
Echo.channel('chat-room') .listen('MessagePosted', (e) => { console.log(e.message); });
9、排隊(duì)的事件監(jiān)聽(tīng)器
Laravel中的事件監(jiān)聽(tīng)器現(xiàn)在可以排隊(duì),允許你在后臺(tái)處理事件并提高應(yīng)用程序的響應(yīng)時(shí)間。排隊(duì)的事件監(jiān)聽(tīng)器以異步方式處理,釋放主請(qǐng)求線程,使你的應(yīng)用程序更具響應(yīng)性。
class SendWelcomeEmail implements ShouldQueue{ use Queueable; public function handle(UserRegistered $event) { // 發(fā)送歡迎郵件給用戶(hù)... }}
10、Laravel Mix
Laravel Mix是一個(gè)強(qiáng)大的資產(chǎn)編譯工具,簡(jiǎn)化了構(gòu)建和管理前端資產(chǎn)的過(guò)程。它為定義webpack構(gòu)建提供了清晰而流暢的API,輕松編譯CSS和JavaScript資產(chǎn),優(yōu)化它們,并生成所需的HTML標(biāo)簽。
mix.js('resources/js/app.js', 'public/js') .sass('resources/sass/app.scss', 'public/css') .sourceMaps();
11、Laravel Dusk
Laravel Dusk是Laravel提供的一款一方瀏覽器自動(dòng)化和測(cè)試工具。它允許你編寫(xiě)表達(dá)力強(qiáng)大且易于理解的瀏覽器測(cè)試,模擬用戶(hù)交互并斷言你的應(yīng)用程序的行為是否符合預(yù)期。
public function testLogin(){ $this->browse(function ($browser) { $browser->visit('/login') ->type('email', 'user@example.com') ->type('password', 'secret') ->press('Login') ->assertPathIs('/dashboard'); });}
12、路由模型綁定改進(jìn)
在Laravel 8中,路由模型綁定已經(jīng)得到改進(jìn),提供了額外的靈活性和定制選項(xiàng)?,F(xiàn)在,你可以為路由參數(shù)定義自定義解析器,允許你對(duì)模型的檢索和綁定有更精細(xì)的控制。
public function boot(){ Route::bind('user', function ($value) { return User::findBySlug($value) ?? abort(404); });}
13、Laravel Horizon
Laravel Horizon是一個(gè)美觀的儀表板和基于代碼的配置工具,用于監(jiān)視和管理你的Laravel隊(duì)列。它實(shí)時(shí)監(jiān)控你的隊(duì)列工作者的狀態(tài),使你能夠輕松查看隊(duì)列的狀態(tài)和性能。
14、路由緩存
Laravel的路由緩存功能允許你緩存應(yīng)用程序路由定義的編譯形式,從而加快路由注冊(cè)的速度。這可以顯著提高你的應(yīng)用程序的性能,特別是如果你有大量的路由。
php artisan route:cache
15、Laravel Scout
Laravel Scout是一個(gè)全文搜索包,與Laravel完美集成。它提供了一種簡(jiǎn)單而優(yōu)雅的方式來(lái)使用各種驅(qū)動(dòng)程序(如Algolia、Elasticsearch等)搜索你的Eloquent模型。
use LaravelScoutSearchable;class Product extends Model{ use Searchable; // ...}
16、Laravel Cashier
Laravel Cashier為訂閱用戶(hù)到你應(yīng)用程序服務(wù)提供了一種富有表現(xiàn)力且流暢的界面。它處理訂閱計(jì)費(fèi)、發(fā)票、收據(jù)生成等,使得將基于訂閱的計(jì)費(fèi)集成到你的Laravel應(yīng)用程序中變得輕松。
use LaravelCashierBillable;class User extends Authenticatable{ use Billable; // ...}
17、Eloquent:子查詢(xún)?cè)鰪?qiáng)
在Laravel 8中,Eloquent在子查詢(xún)方面進(jìn)行了一些增強(qiáng),使處理復(fù)雜查詢(xún)變得更容易?,F(xiàn)在,你可以直接在查詢(xún)構(gòu)建器中定義子查詢(xún),并在多個(gè)查詢(xún)之間重復(fù)使用它們。
$latestPosts = DB::table('posts') ->select('title') ->where('created_at', '>', function ($query) { $query->select('created_at') ->from('posts') ->orderByDesc('created_at') ->limit(1); }) ->get();
18、Eloquent:動(dòng)態(tài)關(guān)聯(lián)
Laravel 8引入了動(dòng)態(tài)關(guān)聯(lián),允許你在運(yùn)行時(shí)定義關(guān)聯(lián),無(wú)需在模型類(lèi)中聲明它們。這提供了更大的靈活性,并允許你處理動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)。
public function products(){ return $this->hasManyThrough( $this->category->productModel, $this->category, 'shop_id', 'category_id', 'id', 'id' );}
19、Eloquent:自動(dòng)日期轉(zhuǎn)換
Laravel 8引入了自動(dòng)日期轉(zhuǎn)換功能,自動(dòng)將日期列轉(zhuǎn)換為Carbon實(shí)例,使你更輕松地使用它們。它簡(jiǎn)化了日期操作,使得在Eloquent模型中使用日期更加直觀。
protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime',];
20、Laravel API資源
Laravel API資源提供了一種將你的Eloquent模型轉(zhuǎn)換為JSON表示的便捷方式。它允許你定制資源的展示方式,并為響應(yīng)定義附加數(shù)據(jù)。
class UserResource extends JsonResource{ public function toArray($request) { return [ 'id' => $this->id, 'name' => $this->name, 'email' => $this->email, ]; }}
Laravel不斷發(fā)展,為開(kāi)發(fā)者提供前沿功能和增強(qiáng)。通過(guò)及時(shí)了解最新特性,你可以更快、更高效地構(gòu)建高質(zhì)量的應(yīng)用程序。上述20個(gè)Laravel特性將對(duì)2023年使用Laravel的開(kāi)發(fā)者至關(guān)重要。