当前位置:  开发笔记 > 编程语言 > 正文

laravel / dingo API上的变压器用法

如何解决《laravel/dingoAPI上的变压器用法》经验,为你挑选了1个好方法。

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

我具有以下控制器功能

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,
...
        ];
    }
}

现在我的问题是

    我只能将雄辩的对象与变形金刚一起使用吗?

    在这种情况下,令牌是由jwt库生成的,我将其与数组绑定为单个用户数组。现在如何将这个数组传递给演示者。

    分形转换器的文档没有提到将数组传递给演示者,我的数据可能并不总是来自雄辩的对象。

    我该如何处理?

    为什么使用主持人?我可以使用演示者还是变形者,对吗?

tomvo.. 5

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

演示者/转换器只是将数据从一种结构投射到另一种结构的一层。当您想要确保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);可以读取$userSentinel返回的对象/数组。



1> tomvo..:

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

演示者/转换器只是将数据从一种结构投射到另一种结构的一层。当您想要确保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);可以读取$userSentinel返回的对象/数组。

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有