2017-10-06 14 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); 
    } 
} 

는 그러나, 나는 결과로이 얻을 : members 속성

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

사용자 세부 사항이 숨겨져 있습니다. 어떻게 표시합니까?

/** 
* 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)); 
    } 

그래서 같은 시도 : 다음 source code here의 문서를 참조

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

integer|float|boolean|string|array 값을 추가 할 수

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

희망이 도움

+1

을이 이유를 설명 I 개체를 표시 할 수 없습니다. 감사. 사용자 repo에서 getArrayResults()를 사용하여 결과를 얻으려고했습니다. 그러나, 나는 개체를 얻을 필요가 회원 목록에 중첩 배열되지 않습니다. 그러므로 나는 이것이 나를위한 최선의 해결책이 아니라는 것을 깨달았다. – misha