gpt4 book ai didi

php - 在 laravel/dingo API 上使用 Transformer

转载 作者:可可西里 更新时间:2023-10-31 22:52:43 24 4
gpt4 key购买 nike

我正在创建一组 REST API,以使用 laravel 存储库模式公开给我的移动应用程序。我正在使用 dingo 作为 REST 框架。我对如何使用转换器完成 API 的响应感到困惑。

我有以下 Controller 功能

if(!$user) { 
//Authenticate with Twitter and authenticate
//Register user and issue jwt
$user = Sentinel::register($device_details);
$user_data = json_decode($user,true);
$device_details['users_id'] = $user['users_id'] = $user_data['id'];
$this->device_details->create($device_details);
}
$token = JWTAuth::fromUser($user);
$user_array = $user->toArray();
$user_array['token'] = $token; //An array containing user details and token
return $this->response->item($user_array, new UserTransformer)->setStatusCode(200); //I can only pass an object (eloquent) as the #1 parameter

我的变形金刚课

namespace App\Api\V1\Transformers;

use App\User;
use League\Fractal\TransformerAbstract;

class UserTransformer extends TransformerAbstract {

public function transform(User $user)
{
return [
'users_id' => (int) $user->users_id,
'AUTH-TOKEN' => $user->token // Doesnt comes from database,
...
];
}
}

现在我的问题是,

  1. 我只能将 eloquent 对象与变形器一起使用吗?
  2. 在这种情况下, token 由 jwt 库生成,我将其作为单个用户数组与数组绑定(bind)。现在如何将这个数组传递给演示者。
  3. 分形更改器(mutator)的文档没有说明将数组传递给演示者。我的数据可能并不总是来自 Eloquent 对象。
  4. 我该如何处理这种情况?
  5. 为什么使用演示者?我会使用演示器还是变形器,对吗?

最佳答案

我猜你在这里混淆了几个概念。演示者与存储库模式相关联,我在您的示例代码中没有看到任何相关内容,但我假设您正在使用它。

presenter/transformer 只不过是将数据从一个结构转换为另一个结构的层。当您想要确保 API 始终返回相同的结构而不管底层数据对象是否更改时,转换器层非常有用。

因此,为了清楚起见,如果您真的想要遵循存储库模式,那么正确的方法是让演示者返回一个转换器。但不要使事情过于复杂。

你可以使用任何你想转换的东西,你也可以将一个数组转换成另一个数组,但你必须确保参数接受它。例如这个:

public function transform(Array $user){
return [
'user_id' => (int) $user['id'],
'auth_token' => $user['token']
];
}

我看到您正在使用 Dingo 并在 Laravel 5 中使用它。因此,请尝试将您的 dingo 响应修改为:

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

还要确保 JWTAuth::fromUser($user); 可以读取 Sentinel 返回的 $user 对象/数组。

关于php - 在 laravel/dingo API 上使用 Transformer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34329543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com