該包提供了一個漂亮且簡單的 Fractal 包裝器,可以在 Laravel 應用程式中使用。如果您不知道 Fractal 是做什麼的,請看一下他們的介紹。簡而言之,Fractal 對於在 API 中使用資料之前轉換資料非常有用。
使用分形資料可以像這樣進行轉換:
使用 LeagueFractalManager;使用 LeagueFractalResourceCollection;$books = [ ['id' => 1, 'title' => 'Hogfather', 'characters' => [...]], ['id' => 2、'title' => '殺死所有人的遊戲'、'characters' => [...]] ];$manager = new Manager();$resource = new Collection($books, new BookTransformer());$manager->parseInincludes('characters');$manager->createData($resource)->toArray() ;
這個包使這個過程變得更容易:
分形() ->收藏($書) ->transformWith(new BookTransformer()) ->包含字元() ->toArray();
外觀愛好者會很高興知道提供了外觀:
分形::collection($books)->transformWith(new BookTransformer())->toArray();
還有一個非常簡短的語法可用於快速轉換資料:
分形($books, new BookTransformer())->toArray();
您也可以直接從 Laravel 集合轉換:
收集($books)->transformWith(new BookTransformer());
從 Laravel 集合直接轉換對於 Eloquent 結果特別有用:
使用者::all()->transformWith(new UserTransformer())->toArray();
Spatie 是一家位於比利時安特衛普的網頁設計公司。您可以在我們的網站上找到所有開源專案的概述。
我們投入了大量資源來創建一流的開源套件。您可以透過購買我們的一款付費產品來支持我們。
我們非常感謝您從家鄉寄給我們一張明信片,並註明您正在使用我們的哪種套餐。您可以在我們的聯絡頁面上找到我們的地址。我們在虛擬明信片牆上發布所有收到的明信片。
您可以透過composer拉入包:
作曲家需要 spatie/laravel-fractal
該包將自動註冊。
如果要變更預設序列化器、預設分頁器或預設分形類別SpatieFractalFractal
您必須發佈設定檔:
php artisan 供應商:發佈 --provider="SpatieFractalFractalServiceProvider"
如果您要升級到 Laravel 5.5,現有的設定檔應從laravel-fractal.php重新命名為fractal.php
這是已發布文件的內容:
return [/* * 執行轉換時所使用的預設序列化器。 * 可以留空以使用 Fractal 的預設值。這可以是 * 字串或 LeagueFractalSerializerSerializerAbstract 子類別。 */'default_serializer' => '',/* 執行轉換時所使用的預設分頁器。 * 可以留空以使用 Fractal 的預設值。這可以是 * 字串或 LeagueFractalPaginatorPaginatorInterface 子類別。 */'default_paginator' => '',/* * LeagueFractalSerializerJsonApiSerializer 將使用此值 * 作為產生連結的前綴。設定為“null”以停用此功能。 */'base_url' => null,/* * 如果您想要覆寫或擴充預設的 SpatieFractalFractal * 實例,請提供您要使用的類別的名稱。 */'fractal_class' => SpatieFractalFractal::class,'auto_includes' => [/* * 如果啟用 Fractal 將自動新增包含在 `include` 請求參數中的名稱。 */'enabled' => true,/* * 請求中的鍵名,我們應該在其中尋找要包含的內容。 */'request_key' => '包含', ],'auto_excludes' => [/* * 若啟用,Fractal 將自動新增排除「排除」請求參數中存在的*姓名。 */'enabled' => true,/* * 請求中的鍵名,我們應該在其中尋找要排除的排除項。 */'request_key' => '排除', ],'auto_fieldsets' => [/* * 若啟用,Fractal 將自動新增名稱出現在「fields」請求參數中的欄位集。 */'enabled' => true,/* * 請求中鍵的名稱,我們應該在其中尋找要解析的欄位集。 */'request_key' => '字段', ], ];
請參閱spatie/fractalistic
的文檔以了解該套件提供的所有方法。
在所有程式碼範例中,您可以使用fractal()
而不是Fractal::create()
。
若要傳回帶有 json 資料的回應,您可以在 Laravel 應用程式中執行此操作。
$books = fractal($books, new BookTransformer())->toArray();回傳回應()->json($books);
Fractal 類別上的respond()
方法可以讓這個過程更加簡化。
傳回分形($books, new BookTransformer())->respond();
您可以傳遞回應代碼作為第一個參數,也可以傳遞一些標頭作為第二個參數
return fractal($books, new BookTransformer())->respond(403, ['a-header' => '一個值','another-header' => '另一個值', ]);
您可以傳遞 json 編碼選項作為第三個參數:
傳回分形($books, new BookTransformer())->respond(200, [], JSON_PRETTY_PRINT);
您也可以使用回呼設定狀態代碼和標頭:
使用 IlluminateHttpJsonResponse;傳回分形($books, new BookTransformer())->respond(function(JsonResponse $response) {$response->setStatusCode(403) -> header('a-header', 'a value') ->withHeaders(['another-header' => '另一個值','yet-another-header' => '又一個值', ]); });
您可以使用 Laravel 的 Macroable 特徵為 Fractal 類別新增方法。想像一下,您想要向請求的元資料添加一些統計信息,您可以這樣做而不會使程式碼混亂:
使用 SpatieFractal 分形; Fractal::macro('stats', function ($stats) {// 依需求轉換傳遞的統計資料return $this->addMeta(['stats' => $stats]); });分形($books, new BookTransformer())->stats(['runtime' => 100])->respond();
您可以執行make:transformer
指令來快速產生虛擬變壓器。預設情況下它將儲存在appTransformers
目錄中。
將設定檔從laravel-fractal
重命名為fractal
引入v3
是為了將league/fractal
替換為spatie/fractalistic
。對 Lumen 的支持已被放棄。您應該能夠將 Laravel 應用程式從v2
升級到v3
而無需更改任何程式碼。
在大多數情況下,您只需升級到v2
,無需對程式碼進行任何更改或僅進行少量更改:
resourceName
已重新命名為withResourceName
。
該軟體包的v2
被標記的主要原因是 League 底層 Fractal 的 v0.14 包含重大變更。如果您在 v2 中使用LeagueFractalSerializerJsonApiSerializer
, links
鍵將包含self
、 first
、 next
和last
。
請參閱變更日誌以了解最近變更的更多資訊。
$ 作曲家測試
詳細資訊請參閱貢獻。
如果您發現有關安全的錯誤,請發送郵件至 [email protected],而不是使用問題追蹤器。
弗里克·范德赫滕
所有貢獻者
麻省理工學院許可證 (MIT)。請參閱許可證文件以獲取更多資訊。