【发布时间】:2021-11-27 21:10:50
【问题描述】:
编辑:
我输出了数组,@apokryfos 提到了一些关于资源无法序列化的问题。
以下是一些调试输出的外观:(删除了一些更敏感的信息) Stream in Timestamp 这是我的时间戳导致问题。如果我这样做了
unset($user["timestamp"]);
然后几乎每个人的解决方案都有效。所以,真正的原因是资源在我的时间戳中。我该如何停止或修复它?我试着做
public $timestamps = false;
这没有任何变化。
我已经阅读了文档和一些教程。可悲的是,我似乎找不到任何关于返回什么以及使用 Eloquent 时可以使用哪些函数的文档。也许我只是想念它。
但是,我在我的控制器中使用此代码。
public function find($userName){
$user = UserSecurity::where('userName', $userName)->get();
//dd($user);
return Response()->json(['data' => $user], 200);
}
这是我的路由器代码。
$router->get('/UserSecurity/find/{userName}', ['uses'=>'UserSecurityController@find']);
我知道它正在从数据库中提取正确的数据,就像我取消注释 dd($user) 我可以在屏幕上看到它一样。但是,如果我尝试通过Response()->json(..) 发送响应,则会出现此屏幕失败。
Image of Exception
我知道我可能错误地使用了 Response(),但实际上我尝试了许多不同的方法。有些只是显示空响应,有些则类似地崩溃。
我已经尝试删除 get() ,因为没有结果,所以我发现它什么也没返回。我试过Response($user),它是空的。我已经尝试return Response()->json($user); 出现相同类型的不支持错误。
感谢您的帮助。
编辑: 更改一些代码进行测试。我改成了这个
public function find($userName){
$user = UserSecurity::where('userName', $userName)->get()->toJson();
$user = json_encode($user);
return Response($user);
}
这将返回 false 。我不确定布尔值来自哪里。原来的 dd($user) 实际上有来自数据库的正确信息,所以我知道它的查询是正确的。
【问题讨论】:
-
我认为这是因为不可能将所有响应作为 json 返回,因为响应包含的标头与 json 模式不匹配。如果是这种情况,请尝试从响应中删除标头。
-
要调试这个做
$user->map->jsonSerialize()->dd()并检查是否有任何不能序列化为 JSON 的值,例如资源(出于任何原因) -
@apokryfos 哇,好吧,我刚刚发现它确实有一个流资源。这可能是问题吗?我会在等待回复时测试一些东西。
-
是的 PHP 不能 JSON 序列化系统资源。奇怪的是,模型在其
jsonSerialize方法中开始使用它,如果您有创建资源的访问器,那么可能通过 $hidden 将它们从 jsonSerialize 中排除 -
@apokryfos 如果您可以将其作为答案,我可以选择它。那解决了它。谢谢!
标签: php laravel eloquent lumen