3

関係の使用のためにトランスフォーマーをネストするエレガントな方法はありますか? コレクションに条件付きで関係モデルを含めることができる REST インターフェイスを構築しようとしています。これまでのところ、私はわずかに成功していますが、トランスフォーマーに関しては少し壊れているようです (私は Laravel 5.1 と Dingo に少し慣れていないことを認めます)。これを可能な限り DRY に保つことを検討しているので、関係や属性が将来変更された場合でも簡単に変更できます。

たとえば、ユーザーが 1 つ以上のメッセージを受信する可能性がある (ユーザー hasMany 受信メッセージ) という単純なシナリオでは、UserTransformer で次のことができます。

<?php

namespace App\Transformers;

use App\Models\User;
use League\Fractal;

class UserTransformer extends Fractal\TransformerAbstract
{
    public function transform(User $user)
    {
        // Transform the basic model
        $returnUser = [
            'id'           => (int) $user->id,
            'email'        => $user->email,
            'role'         => $user->role,
            'status'       => $user->status,
            'links'        => [
                [
                    'rel' => 'self',
                    'uri' => '/users/'.$user->id
                ]
            ]
        ];

        // Transform relationships, but only if they exist and are requested
        if (isset($user->receivedMessages))
        {
            $returnUser['received_messages'] = [];

            foreach ($user->receivedMessages as $msg)
            {
                $returnUser['received_messages'][] = [
                    'id'      => $msg->id,
                    'read'    => $msg->read,
                    'content' => $msg->content
                ];
            }
        }
        return $returnUser;
    }
}

この場合、関連する受信メッセージに MesagesTransformer をネスト/適用して出力フォーマットを設定し、すべての REST 出力がすべての関係で一貫性を保つようにします。これは可能ですか?ありがとう!

4

1 に答える 1

3

ここで私の質問に対する答えを見つけることができました: http://fractal.thephpleague.com/transformers/

于 2015-07-21T17:28:09.327 に答える