在我的Laravel 5应用程序中,我使用了分形和变形金刚。在一个响应中,我嵌套了两个用Trasnformers转换的对象。
这是我的代码:
public function transform(UserLogin $userLogin)
{
$fractal = new Manager();
$fractal->setSerializer(new ArraySerializer());
$user = new Item($userLogin->user, new UserTransformer);
return [
"token" => $userLogin->token,
"user" => $fractal->createData($user)->toJson()
];
}
以及此处的用户Trasnformer转换:
public function transform(User $user)
{
return [
'id'=> $user->id,
'name' => $user->firstname." ".$user->lastname,
'email' => $user->email,
];
}
在我的控制器中,我这样回来:
return Fractal::item($userLogin, new UserLoginTransformer)->responseJson(200);
这是来自服务器的响应:
{
"token": "the_token_generated",
"user": "{\\\"id\\\":1,\\\"name\\\":\\\"Name\\\",\\\"email\\\":\\\"myemail@myemail.com\\\"}"
}
显示所有这些斜杠我有什么不对?
答案 0 :(得分:1)
您正在编码两次:
return [
"token" => $userLogin->token,
"user" => $fractal->createData($user)->toJson()
];
请注意,user
键包含json字符串,因为您已使用toJson()
对其进行编码。
现在,当您对最终结果进行编码时,您将编码该json字符串并导致字符串:
"{\\\"id\\\":1,\\\"name\\\":\\\"Name\\\",\\\"email\\\":\\\"myemail@myemail.com\\\"}"
您不应该编码部分结果,只能编码最终结果:
return [
"token" => $userLogin->token,
"user" => $fractal->createData($user)
];
修改:根据您的评论,您需要:
return [
"token" => $userLogin->token,
"user" => $fractal->createData($user)->toArray()
];