1

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

$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",
        }
      }
    }
}

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

编辑 当前响应返回没有转换的用户对象,如果我只返回用户转换的对象,如下所示,它返回正确的转换对象:

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

2 回答 2

1

正如在问题跟踪器(https://github.com/dingo/api/issues/743#issuecomment-160514245)上所讨论的,jason lewis 回复了以下问题:

目前你能做到这一点的唯一方法就是扭转这种局面。因此,您将返回响应项,然后添加访问令牌数据,可能作为元数据。

所以,像这样的东西。

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

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

于 2015-12-01T12:42:55.977 回答
0

我使用内部请求让它工作。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;

这将返回转换后的数据。

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

您将不得不处理/api/users/{email-id}不存在电子邮件 ID 的情况。

于 2015-11-28T21:42:15.707 回答