4

私たちの Eloquent モデルには、Laravel のスネーク ケースの慣習に従った属性があります。

など_ first_name_last_namecreated_at

私のフロントエンド(反応)はjavascriptキャメルケース標準に従いますが。

など_ firstName_lastNamecreatedAt

API 応答を送信するときに、すべての属性をキャメル ケースに変換する簡単な方法はありますか?

Larave 5.2 と Dingo API パッケージを使用しています。


アップデート

受け入れられた回答に続いて、カスタム応答形式のアプローチを使用しました。実装については、次の要点を参照してください (単体テストを含む)。

https://gist.github.com/andrewmclagan/c5e0fe601d23f3b859b89a9f8922be68

4

3 に答える 3

2

実際にはいくつかのオプションがあります。(必要でない限り) それらの実装には踏み込みませんが、考えられるいくつかを以下に示します。

Laravel の場合:

  • toArray()モデルのメソッドをオーバーライドします。モデルが JSON に変換されると、 が呼び出されますtoArray()。このメソッドを使用して、すべてのキーを調べてキャメルケースに変換できます。ただし、すべてのモデルでこれをオーバーライドする必要がありますが、親クラスまたはトレイトを介して抽象化できます。

ディンゴで:

  • Response Builderでトランスフォーマーを使用します。モデルごとにトランスフォーマーを作成することも、トランスフォーマーを作成してすべてのモデルに登録することもできます。トランスフォーマーでキーを camelCase に変換します。CamelTransformer

  • カスタム応答形式を作成します。camelJsonデフォルトの json 形式を拡張する応答形式を作成できます。キーをキャメルケースするロジックで必要なメソッドをオーバーライドします。

  • ResponseWasMorphedイベントを使用します。イベントのイベントハンドラーを作成しResponseWasMorphed、そこにあるキーをキャメルケースに入れます。

これらのオプションのいずれかでジョブを実行できるはずです。それは、これらの変換をどの程度グローバルまたは粒度にしたいかの問題です。たとえば、変更toArray()は、応答コードだけでなく、モデルを配列 (または json) に変換するすべてのコードに影響するため、変更をグローバルにしたくない場合があります。

カスタム応答形式は、おそらく、状況に対する使いやすさと適切さの最良の組み合わせだと思います。

于 2016-04-07T06:44:31.397 に答える