優雅地呈現數據:Laravel Presentable 的應用實踐

最近,我在一個 laravel 項目中負責用戶管理模塊。用戶數據存儲在數據庫中,包含姓名、郵箱、注冊時間等字段。在用戶列表頁面,我們需要將用戶的姓名以首字母大寫的形式顯示,并在用戶詳情頁面顯示格式化的注冊時間。 如果直接在視圖層或控制器中處理這些格式化工作,代碼會變得非常混亂,而且難以維護和測試。

為了解決這個問題,我引入了 datacreativa/laravel-presentable 包。安裝過程非常簡單,只需要使用 composer

composer require datacreativa/laravel-presentable

安裝完成后,我們需要在 Eloquent 模型中使用 HasPresentable trait 并指定 Presenter 類:

use AppModelsPresentersUserPresenter;use TheHiveTeamPresentableHasPresentable;class User extends Model{    use HasPresentable;    protected $presenter = UserPresenter::class;}

然后,使用 Artisan 命令生成 Presenter 類:

php artisan make:presenter UserPresenter

在 UserPresenter 類中,我們可以定義各種方法來處理模型數據的呈現邏輯:

namespace AppModelsPresenters;use TheHiveTeamPresentablePresenter;use CarbonCarbon;class UserPresenter extends Presenter{    public function formattedName()    {        return ucwords($this->model->name);    }    public function formattedRegistrationDate()    {        return Carbon::parse($this->model->created_at)->format('Y-m-d H:i:s');    }}

現在,我們可以在模型中直接使用 present() 方法訪問 Presenter 中定義的方法:

$user = User::find(1);echo $user->present()->formattedName(); // 輸出首字母大寫的用戶名echo $user->present()->formattedRegistrationDate(); // 輸出格式化的注冊時間

通過這種方式,我們成功地將數據呈現邏輯從模型和視圖層分離出來,使得代碼更加清晰、模塊化,也更易于維護和測試。 這不僅提高了代碼的可讀性,也降低了后期維護的成本。 此外,Presenter 類可以方便地進行單元測試,確保數據呈現的準確性。

總結來說,datacreativa/laravel-presentable 包為我們提供了一種簡潔高效的方式來處理 Eloquent 模型的數據呈現。通過使用 Presenter,我們可以將復雜的呈現邏輯封裝到獨立的類中,從而提高代碼的可維護性和可測試性,最終提升開發效率。 如果你正在尋找一種優雅的方式來處理 Laravel 中的 Eloquent 模型數據呈現,強烈推薦你嘗試一下這個包。

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享