2016-10-16 11 views
3

私は小さな問題があります。たぶん誰かがアイデアを持っているかもしれません。Symfony JsonResponse with Serializer

私は以下の方法でシリアライザを使用します。関数json_encodeが2回適用されるという問題。

最初に私が$ serializer-> serialize($ post、 'json')と呼ぶとき;

$ response-> setData();で2回目です。

私はデコードするために関数を2回呼び出す必要があります。

アイデア?

$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を使用しているため、オブジェクトが2回エンコードされます。代わりに単純な応答を使用します。さらに、データの一部だけでなく、すべてのデータをエンコードします。例として:

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

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

return $response: 

・ホープ、このヘルプ

+1

ありがとうございます。 PersistantCollectionでgetValues()を呼び出すための解決策が見つかりました。エンティティでJsonSerializableを実装する。シリアライザなし。 – Tapakan