首页 > 解决方案 > 解决了。api响应laravel不显示

问题描述

当我想从 api 返回一个值时,我遇到了一些问题,当我使用dd()函数时,它会显示结果。但是当我使用return时,它不显示结果

Route::middleware('auth:api')->get('/user', function (Request $request) {
    dd($request->user()); 
});

使用 dd() 时

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return response()->json($request->user());
});

没什么可显示的

任何想法如何展示它?

标签: phplaravelapiresponse

解决方案


那是因为您返回的是GenericUser, Illuminate\Auth\GenericUser,而不是 Eloquent 模型;您没有为 Guard 正在使用的用户提供者使用 Eloquent 模型。此类没有任何方法可以像 Model 那样将此对象序列化为 JSON,并且没有任何json_encode可以序列化的公共属性。

如果你使用json_encode这个对象,你会得到一个 JSON 表示法的空对象:

echo json_encode(new Illuminate\Auth\GenericUser(['id' => 1]));

// {}

也许您想使用 Eloquent 模型来App\User进行身份验证?

config/auth.php

$providers = [
    ...
    'users' => [
        'dirver' => 'eloquent',
        'model' => App\User::class,
    ],
];

您当前正在'database'为您的提供者使用驱动程序,'users'因此您可以得到一个GenericUser代表您的用户的驱动程序。


推荐阅读