0

アプリを初期化するには、次のルートがあります。

/initialize

これは、タクソノミー、列挙型、およびコレクションのような他のいくつかのタクソノミーを返します。これにより、複数の HTTP 要求が節約されます。

Dingo/Fractal とはいえ、複数のコレクションに対応できる方法がわかりません。

例えば

return [
    'taxonomies' => $this->response->collection($taxonomies, new TaxonomyTransformer);
    'enumerables' => $this->response->collection($enumerables, new EnumerableTransformer);
    'otherStuff' => $this->response->collection($otherStuff, new OtherStuffTransformer);
];  
4

2 に答える 2

0

私は同じ問題を抱えており、1対多の関係でTransformerを使用する方法から解決策を見つけました。#1054 . これが、コントローラーのディンゴのトランスフォーマーで返したいコレクションです。

$user = User::where('email','=',$input['email'])->with('departments')->with('roles')->get();

部門変圧器

class DepartmentTransformer extends TransformerAbstract
{
    public function transform($department)
    {
        return [
            'id' => $department['id'],
            'name' => $department['name'],
            'level' => $department['level'],
            'parent_id' => $department['parent_id']
        ];
    }
}

役割トランスフォーマー

class RolesTransformer extends TransformerAbstract
{
    public function transform($role)
    {
        return [
            'name' => $role['name'],
            'slug' => $role['slug'],
            'description' => $role['description'],
            'level' => $role['level']
        ];
    }

}

ユーザートランスフォーマー

class UserTransformer extends TransformerAbstract
{
    protected $defaultIncludes = ['departments','roles'];


    public function transform($user)
    {
        return [
            'id' => $user['id'],
            'name' => $user['name'],
            'email' => $user['email'],
            'phone' => $user['phone'],
        ];
    }


    public function includeDepartments(User $user)
    {
        $dept  = $user->departments;

        return $this->collection($dept, new DepartmentTransformer());
    }


    public function includeRoles(User $user)
    {
        $rl = $user->roles;

        return $this->collection($rl, new RolesTransformer());
    }
}

私のコントローラーで

$user = User::where('email','=',$input['email'])->with('departments')->with('roles')->get();

return $this->response->collection($user, new UserTransformer());

そして、私は結果を得ました

            "data": {
            {
                "id": 43,
              "name": "test7",
              "email": "test7@foxmail.com",
              "phone": "186********",
              "departments": {
                "data": {
                  {
                      "id": 1,
                    "name": "业务一部",
                    "level": 1,
                    "parent_id": 0
                  }
                }
              },
              "roles": {
                "data": {
                  {
                      "name": "agent",
                    "slug": "agent",
                    "description": "业务员",
                    "level": 1
                  }
                }
              }
            }
          }

UserTransformer での $defaultIncludes および includeXXX() メソッドの使用法に注意してください。詳細情報はFractal Docから取得できます。

于 2016-11-28T12:05:30.097 に答える