在開發 laravel 應用時,我經常遇到需要在視圖中展示一些經過格式化的數據。例如,我需要將用戶的注冊時間顯示為“X天前”的格式,或者將用戶的名字和姓氏拼接成完整的姓名。如果直接在 Blade 模板中編寫這些邏輯,會導致模板變得臃腫不堪,難以維護。如果將這些邏輯放在 Model 中,又會使 Model 承擔過多的職責,違反了單一職責原則。
這時,laracasts/presenter 就派上了大用場。它允許你創建一個 presenter 類,專門用于處理視圖數據的格式化邏輯。
安裝 Laracasts/Presenter 非常簡單,只需要使用 composer:
composer require laracasts/presenter
接下來,你需要創建一個 Presenter 類。例如,如果你有一個 User 模型,你可以創建一個 UserPresenter 類:
<?php namespace AppPresenters; use LaracastsPresenterPresenter; class UserPresenter extends Presenter { public function fullName() { return $this->entity->first_name . ' ' . $this->entity->last_name; } public function registeredAtHuman() { return $this->entity->created_at->diffForHumans(); } }
在這個 Presenter 類中,你可以定義各種方法來格式化你的數據。$this->entity 屬性可以訪問到你的模型實例。
然后,在你的模型中使用 LaracastsPresenterPresentableTrait trait,并指定你的 Presenter 類:
<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use LaracastsPresenterPresentableTrait; class User extends Model { use PresentableTrait; protected $presenter = 'AppPresentersUserPresenter'; }
現在,你就可以在你的視圖中使用 Presenter 類來格式化數據了:
<h1>Hello, {{ $user->present()->fullName }}</h1> <p>Registered {{ $user->present()->registeredAtHuman }}</p>
$user->present() 方法會返回你的 Presenter 實例,你可以通過它來調用 Presenter 類中定義的方法。
使用 Laracasts/Presenter 的優點:
- 代碼清晰: 將視圖數據的格式化邏輯從視圖和模型中分離出來,使代碼更易于閱讀和理解。
- 易于維護: 如果你需要修改數據的格式化方式,只需要修改 Presenter 類即可,無需修改視圖或模型。
- 可測試性: Presenter 類可以獨立進行單元測試,確保數據的格式化邏輯正確無誤。
- 提高開發效率: 減少視圖模板的復雜度,將視圖展示相關的邏輯集中到一個地方,方便團隊協作開發
總之,Laracasts/Presenter 是一個非常實用的 Laravel 擴展包,可以幫助你編寫更清晰、更易于維護的代碼。如果你正在開發 Laravel 應用,強烈建議你嘗試使用它。
Composer在線學習地址:學習地址