2017-10-06 59 views
1

我正在構建Symfony3項目。我正在使用JMS進行序列化。我有Group與ManyToMany關係的實體到User。我正在嘗試向Group對象添加更多數據。我正在使用序列化偵聽器來實現這一點。例如,我想獲得與當前用戶同一學校的小組成員。我setData到組對象是這樣的:JMS序列化偵聽器:添加的對象爲空

class SerializationListener{ 

    //Constructor 
    /** 
    * @param ObjectEvent $event 
    */ 
    public function onGroupEntitySerialize(ObjectEvent $event) 
    { 
     if (!$this->currentUser) { 
      return; 
     } 

     /** @var GenericSerializationVisitor $visitor */ 
     $visitor = $event->getVisitor(); 

     $group = $event->getObject(); 

     $groupMembersFromUserSchool = $this->em->getRepository('AppBundle:User') 
     ->groupMembersFromUserSchool($group, $this->currentUser); 

     $visitor->setData('members', $groupMembersFromUserSchool); 

     $groupMembersCountFromUserSchool = count($groupMembersFromUserSchool); 

     $visitor->setData('memberCount', $groupMembersCountFromUserSchool); 
    } 
} 

不過,我得到這個作爲結果:

{ 
"items": [ 
    { 
     "memberCount": 17, 
     "id": 1, 
     "name": "TestGroup1", 
     "members": [ 
      {}, 
      {}, 
      {}, 
      {}, 
      {}, 
      {}, 
      {}, 
      {}, 
      {}, 
      {}, 
      {}, 
      {}, 
      {}, 
      {}, 
      {}, 
      {}, 
      {} 
     ] 
    } 
    ] 
    } 

所以在members財產用戶的詳細信息被隱藏。我如何顯示它們?

class Group{ 

     /** 
     * @Expose() 
     * @Groups({"group-details", "group-list"}) 
     */ 
     protected $members; 
    } 

    class User{ 
     /** 
     * @Expose() 
     * @Groups({"group-details", "group-list"}) 
     */ 
     private $id; 

     /** 
     * @Expose() 
     * @Groups({"group-details", "group-list"}) 
     */ 
     protected $name; 
    } 

回答

0

談到source code here的文檔,你可以只添加integer|float|boolean|string|array值:

/** 
* Allows you to add additional data to the current object/root element. 
* @deprecated use setData instead 
* @param string $key 
* @param integer|float|boolean|string|array|null $value This value must either be a regular scalar, or an array. 
*              It must not contain any objects anymore. 
*/ 
public function addData($key, $value) 
{ 
    if (isset($this->data[$key])) { 
     throw new InvalidArgumentException(sprintf('There is already data for "%s".', $key)); 
    } 

所以你可以試試:

$arrayValuesOfMembers = // some data as array probably extracted by the repo methods 
    $visitor->setData('members', $arrayValuesOfMembers); 

希望這有助於

+1

這就解釋了爲什麼我無法顯示對象。謝謝。我試圖通過用戶回購中的getArrayResults()獲得結果。但是,我需要獲取對象,而不是在成員列表中嵌套數組。因此我意識到這對我來說不是最好的解決方案 – misha

相關問題