Laravel & Lumen RESTFul API 拡張パッケージ: Dingo API (5) -- Transformer

WBOY
リリース: 2016-06-20 12:32:21
オリジナル
1756 人が閲覧しました

1. はじめに

コンバーターを通じて、オブジェクトを配列に変換し、ページ分割された結果やネストされたセットを含む整数型およびブール型に強制的に変換できます。協会。

この章では主にコンバータとその使用法について説明します。 ここでのコンバータには次の 2 つの意味が含まれます。

  • 変換層はコンバータを準備および処理する層です。 >
  • トランスフォーマーは、生データを受け取り、それを配列形式に変換するクラスです。プロセッサがそれを処理する方法は、変換レイヤーによって異なります。

2. コンバーターを使用する

コンバーターを使用するには、さまざまな方法があります。

クラスのコンバーターを登録する

クラスのコンバーターを登録すると、ルートからクラスを返すことができます (配列に変換できると仮定します)

app('Dingo\Api\Transformer\Factory')->register('User', 'UserTransformer');
ログイン後にコピー
これは、ルートから直接モデルを返すことができるため、モデルを使用する単純な API で役立ちます。

レスポンス ビルダーの使用

レスポンス ビルダーの章を参照してください。

2. フラクタル

フラクタルは、Dingo API のデフォルトの変換レイヤーであり、データの一貫性を維持するための一連の便利な機能を提供します。

Fractal を使用する前に、公式ドキュメントを読むことをお勧めします。

リレーションシップの全自動一括読み込み

Fractal の組み込み機能を使用してリレーションシップを埋め込む場合、その名前がモデル内の名前と一致していることを確認してください。拡張機能パッケージは、これらの関係を自動的にロードします。

高度な構成

Fractal は、デフォルト構成でデフォルトの変換レイヤーとして登録されます。これを手動で構成するには、サービス プロバイダーで DingoApiTransformerAdapterFractal インスタンスをインスタンス化する必要があります。 🎜>

Lumen を使用している場合は、スタートアップ ファイル (bootstrap.php) でこれを行うことができます:
$this->app['Dingo\Api\Transformer\Factory']->setAdapter(function ($app) {     return new Dingo\Api\Transformer\Adapter\Fractal(new League\Fractal\Manager, 'include', ',');});
ログイン後にコピー

app('Dingo\Api\Transformer\Factory')->setAdapter(function ($app) {    return new Dingo\Api\Transformer\Adapter\Fractal(new League\Fractal\Manager, 'include', ',');});
ログイン後にコピー
レスポンス ビルダーによる高度な使用法

多くの場合、Fractal を応答ビルダーと組み合わせて使用​​することが、コントローラーからデータを返す最良の方法です。応答ビルダーのアイテム、コレクション、およびページネーター メソッドはすべて、フラクタルをカスタマイズするための追加パラメーターを受け取ることができます。

リソース キー

コールバックの使用
return $this->item($user, new UserTransformer, ['key' => 'user']);
ログイン後にコピー

フラクタル変換レイヤーでは、リソースの作成後にトリガーされるコールバックを登録できます。このコールバックは、LeagueFractalResourceItem または LeagueFractalResourceCollection を受け取ります。最初のパラメータとして、LeagueFractalManager インスタンスを 2 番目のパラメータとして指定します。その後、このコールバックを使用して、より複雑なレベルでリソースを操作できます。

最も一般的な使用例は、ページング カーソルを設定するか、応答シリアライザーを変更することです。

リソース キー パラメーターを渡したくない場合は、この空のパラメーターを省略できます。配列:
return $this->collection($users, new UserTransformer, [], function ($resource, $fractal) {    $resource->setCursor($cursor);});
ログイン後にコピー

return $this->collection($users, new UserTransformer, function ($resource, $fractal) {    $fractal->setSerializer(new CustomSerializer);});
ログイン後にコピー
3. カスタム変換レイヤー

データ変換をさらにカスタマイズしたい場合は、Dingo API に独自の変換レイヤーを実装できます。これには、DingoApiContractTransformerAdapter を実装するクラスを作成し、transform メソッドを実装する必要があります。

変換が唯一の必須メソッドであり、必要な他のメソッドを自由に追加できます。変換メソッドの目的は、$response を取得し、$transformer とともに処理のために変換層に渡すことです。その後、変換層は配列を返し、最後にこの配列が変換メソッドによって返されます。変換層が単純な場合は、すべてのロジックをこのクラスに完全に実装できます。
use Dingo\Api\Http\Request;use Dingo\Api\Transformer\Binding;use Dingo\Api\Contract\Transformer\Adapter;class MyCustomTransformer implements Adapter{    public function transform($response, $transformer, Binding $binding, Request $request)    {        // Make a call to your transformation layer to transformer the given response.    }}
ログイン後にコピー

$bindings パラメーターは、メタデータの追加や、開発者がコールバックを介して変換レイヤーと対話できるようにするなど、変換レイヤーにさらに多くの機能が含まれている場合に便利です。

$request パラメータは現在実行されている HTTP リクエストで、変換レイヤーがクエリ文字列パラメータやその他の関連データを必要とする場合に役立ちます。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!