Aje*_*esh 4 php rest json response laravel
我正在创建一组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
Run Code Online (Sandbox Code Playgroud)
我的变形金刚课
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,
...
];
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是
我猜您在这里混淆了几个概念。演示者与存储库模式相关联,在示例代码中没有看到与之相关的任何内容,但我假设您正在使用它。
演示者/转换器只是将数据从一种结构投射到另一种结构的一层。当您想要确保API始终返回相同的结构而无论基础数据对象是否更改时,转换器层都非常有用。
因此,为清楚起见,如果您确实要遵循存储库模式,则正确的方法是演示者返回转换器。但是不要过度复杂化。
您可以使用任何要转换的内容,也可以将一个数组转换为另一个数组,但随后必须确保该参数接受该值。例如:
public function transform(Array $user){
return [
'user_id' => (int) $user['id'],
'auth_token' => $user['token']
];
}
Run Code Online (Sandbox Code Playgroud)
我看到您正在使用Dingo,并在Laravel 5中使用它。因此,请尝试将dingo响应修改为:
return $this->response->item($user, new UserTransformer);
还要确保它JWTAuth::fromUser($user);可以读取$userSentinel返回的对象/数组。
| 归档时间: |
|
| 查看次数: |
2917 次 |
| 最近记录: |