2017-06-05 14 views
0

symfony /シリアライザを使用してjsonにエンティティをシリアル化しようとしています。 私はsymfonyシリアライザのシリアル化が正しくありません

{ 
    "id" : "string", 
    "name" : "name here", 
    "admin": "admin_id" 
    } 

のようなものを取得したいしかし、私は常に完全なツリーで終わる - 結果のJSONは、それらの関係を持つすべての関連企業が含まれています。私は、symfony /シリアライザを使用していて、明らかに何か間違ったことをするのは簡単な作業でなければならないと信じていますが、何ですか?

CarbonNormalizerは、単にnesbot/carbonオブジェクトの文字列表現を返します。ここで

は私のコントローラである:

$data=$this->em->getRepository('Cpa:Cpa')->findAll(); 
    $encoder = new JsonEncoder(); 
    $normalizer = new GetSetMethodNormalizer();//object -same 
    $dateTimeNormalizer = new CarbonNormalizer(); 
    $normalizer->setCircularReferenceHandler(function ($object) { 
     return $object->getId(); 
    }); 
    $this->serializer = new Serializer([$dateTimeNormalizer, $normalizer], [$encoder]); 

    $data = $this->serializer->serialize($data, 'json', ['groups' => ['show'], 'enable_max_depth' => true]); 
    return new JsonResponse($data, $code, [], true); 

そして、私のエンティティ:

<?php 

namespace Domain\Cpa\Models; 


use Domain\Offer\Models\CpaOffer; 
use Domain\User\Models\User; 
use Ramsey\Uuid\Uuid; 

class Cpa 
{ 
/** @var string */ 
private $id; 

/** @var string */ 
private $name; 

/** @var User */ 
private $admin; 

/** @var CpaOffer[] */ 
private $offers; 

/** 
* Cpa constructor. 
* @param string $name 
* @param User $admin 
*/ 
public function __construct($name, User $admin) 
{ 
    $this->id = Uuid::uuid4()->toString(); 
    $this->name = $name; 
    $this->admin = $admin; 
    $this->offers = []; 
} 

/** 
* @return string 
*/ 
public function getId(): string 
{ 
    return $this->id; 
} 

/** 
* @return string 
*/ 
public function getName(): string 
{ 
    return $this->name; 
} 

/** 
* @return User 
*/ 
public function getAdmin(): User 
{ 
    return $this->admin; 
} 

/** 
* @return CpaOffer[] 
*/ 
public function getOffers()//: array 
{ 
    return $this->offers; 
} 

}

serialization.yml

Domain\Cpa\Models\Cpa: 
attributes: 
    id: 
    groups: ['show'] 
    name: 
    groups: ['show'] 
    admin: 
    groups: ['show'] 

答えて

0

グループを使用するには、初期化する必要がありますClassMetadataFactoryあまりに:

'Domain\Cpa\Models\Cpa': 
    attributes: 
    id: 
     groups: ['show'] 
    name: 
     groups: ['show'] 
    admin: 
     groups: ['show'] 
+0

おかげで、ケビン:

// Don't forget to add the new use statements // ... $normalizer = new GetSetMethodNormalizer( new ClassMetadataFactory( new YamlFileLoader('/the/path/to/yourfile.yaml') ) ); // ... 

あなたはまた、あなたのYAMLファイルのインデントを修正する必要があります。設定されたシリアライザをサービス/コントローラに注入する方法はありますか? '/the/path/to/yourfile.yaml' - それはserialization.ymlのパスですか? – svgrafov

関連する問題