Dingo Api Transforme 学习笔记

  • 首先明确transformer 的一个作用就是转成数组,其次是隐藏和改下某些字段名——自定义字段名。
  • transformer的传参方式,在构造函数中获取参数
$this->response()->item($recommend, new SingleClassTransformer($param));
  • transformer 更多方法的诞生 ,比如关联表返回数据

    demo1 多对多:
    RolesTransformer

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

UserTransformer

class UserTransformer extends TransformerAbstract
{
    //这个是重点
    protected $defaultIncludes = ['roles'];

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

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

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

控制器

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

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

返回

"data": {
            {
              "id": 1,
              "name": "test",
              "email": "123@qq.com",
              "phone": "12333333",
              "roles": {
                "data": {
                  {
                    "name": "xxx",
                    "description": "普通用户",
                    "level": 3
                  }
                }
              }
            }
          }

demo2 一对多:例如新闻+评论
NewsTransformer.php

public function transform($item)
{
    return [
        'id' => $item->id,
        'title' => $item->title,
        'created_at' => $item->created_at . '',
        'content' => $item->content,
        'comments' => $this->transformComments($item->comments()->take(3)->get()),
        'comments_count' => $item->comments->count(),
    ];
}
public function transformComments($comments)
{
    //这里不可以使用array_map,转换为数组后会导致NewsCommentsTransformer里面获取错误。
    $array = [];
    foreach ($comments as $news_comments){
        $array[count($array)] = (new NewsCommentsTransformer)->transform($news_comments);
    }
    return $array;
}

NewsCommentsTransformer

public function transform($item)
{
    return [
        'id' => $item->id,
        'content' => $item->content,
        'userid' => $item->user_id,
        'username' => $item->user->name,
        'created_at' => $item->created_at . ''
    ];
}

最后,感谢其他博主的博文以及回答问题的,如下
https://github.com/dingo/api/issues/1054
https://github.com/dingo/api/issues/986#issuecomment-230947533
https://www.codecasts.com/discuss/laravel/development-problems-api-476

补上 统一处理异常 学习地址 https://github.com/dingo/api/issues/411

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值