Laravel 5 dingo api,将多个转换后的对象添加到响应中

Laravel 5 dingo api, add multiple transformed objects to the response

想要添加转换后的对象以及其他响应,我使用了以下代码:

$accessToken = Authorizer::issueAccessToken();

    $user = User::where('email', $request->get('username'))->with('profile')->first();
    if ($user) {
        $accessToken['user'] = $this->response->item($user, new UserTransformer);
    }

    return $accessToken;

预期响应:

{
    "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "token_type": "Bearer",
    "expires_in": 31536000,
    "data": {
      "id": 1,
      "email": "xxxxx",
      "profile": {
        "data": {
          "id": 1,
          "first_name": "Muhammad",
          "last_name": "Shakeel",
        }
      }
    }
}

但没有得到转换后的对象,必须有一些更好的方法来添加多个转换后的对象和响应。我错过了什么吗?

编辑 当前响应 returns 没有转换的用户对象,如果我 return 只有像下面这样的用户转换对象,它 returns 正确的转换对象:

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

我使用内部请求让它工作。 https://github.com/dingo/api/wiki/Internal-Requests

所以你能做的是

假设您有一条路线在 api/users/{email_id}?access_token=...

获取转换后的用户对象

发出 access_token 时,您可以执行以下操作:

$dispatcher = app('Dingo\Api\Dispatcher');
$array = Authorizer::issueAccessToken();

$array['user'] = $dispatcher->get('api/users/'.$request->get("username").'?access_token='.$array['access_token']);
return $array;

这将 return 转换数据。

注意你需要有一个获取用户数据的路由。

您将不得不处理 /api/users/{email-id} 中 email-id 不存在的情况。

正如在问题跟踪器 (https://github.com/dingo/api/issues/743#issuecomment-160514245) 上讨论的那样,jason lewis 对票证的回应如下:

目前唯一能做到这一点的方法就是扭转它。所以你会 return 响应项,然后添加访问令牌数据,可能作为元数据。

所以,像这样。

return $this->response->item($user, new UserTransformer)->setMeta($accessToken);

响应随后将包含一个元数据密钥,该密钥将包含您的访问令牌数据。