2015-05-28 4 views
1

В моем приложении Laravel 5 я использовал фракталы и трансформаторы. В одном ответе я вложил два объекта, преобразованных в Trasnformers.Вложенный трансформатор Laravel 5 возврат «грязный json»

Вот мой код:

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\\\":\\\"[email protected]\\\"}" 
} 

Что я делаю неправильно, чтобы показать все эти косые черты?

ответ

1

Вы кодирующие дважды:

return [ 
    "token" => $userLogin->token, 
    "user" => $fractal->createData($user)->toJson() 
]; 

Обратите внимание, что ключ user содержит строку JSON, как вы закодировали его toJson().

Теперь, когда вы закодировать ваш конечный результат, вы будете кодировать эту JSon строку, что приводит к строке:

"{\\\"id\\\":1,\\\"name\\\":\\\"Name\\\",\\\"email\\\":\\\"[email protected]\\\"}" 

Вы не должны закодировать частичные результаты, только конечный результат:

return [ 
    "token" => $userLogin->token, 
    "user" => $fractal->createData($user) 
]; 

Edit: Основываясь на ваш комментарий вам потребуется:

return [ 
    "token" => $userLogin->token, 
    "user" => $fractal->createData($user)->toArray() 
]; 
+0

Он возвращает {} и никаких данных в «пользовательском» ключе – Bellots

+0

@Bellots Что возвращает метод 'createData()'? Возможно, вам нужно что-то вроде 'toObject()' вместо 'toJson()' для возврата фактической информации. – jeroen

+0

Это метод Fractal, и он принимает только toJson() или toArray() – Bellots

Смежные вопросы