Nested Transformer Laravel 5返回"脏json"

时间:2015-05-28 10:38:11

标签: php json laravel

在我的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\\\"}"
}

显示所有这些斜杠我有什么不对?

1 个答案:

答案 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()
];