2016-10-16 5 views
3

У меня есть небольшая проблема. Может, у кого-то есть идея.Symfony JsonResponse с Serializer

Я использую Serializer следующим образом. Проблема, что функция json_encode применяется два раза.

Сначала, когда я вызываю $ serializer-> serialize ($ post, 'json');

Второй раз в $ response-> setData();

Итак, чтобы декодировать, мне нужна функция вызова два раза.

Любые идеи?

$encoders = [ 
    new JsonEncoder() 
]; 
$normalizer = new ObjectNormalizer(); 
$normalizer->setCircularReferenceHandler(function ($object) { 
    return $object->getId(); 
}); 
$normalizers = [$normalizer]; 
$serializer = new Serializer($normalizers, $encoders); 

$response = new JsonResponse(); 
$response->setData([ 
    'status' => true, 
    'data' => $serializer->serialize($post, 'json') 
]); 

return $response; 
+0

'=> $ Post'? –

+0

Тогда у меня проблемы с кодированием моего объекта и круговой ссылки. Даже если объект реализует JsonSerializable. – Tapakan

ответ

3

Объект закодирован дважды, потому что вы используете jsonresponse, вместо этого используйте простой ответ. Кроме того, кодировать все данные, а не только их часть. В качестве примера:

$responseData = [ 
    'status' => true, 
    'data' => $post 
]; 

$response = new Response(
    $serializer->serialize($$responseData, 'json'), 
    Response::HTTP_OK, 
    ['Content-type' => 'application/json'] 
); 

return $response: 

Надежда эта помощь 'данные'

+1

Спасибо. Найденное решение для вызова getValues ​​() в PersistantCollection. И реализация JsonSerializable в Entity. Без сериализатора. – Tapakan