Выборочная сериализация JMS Serializer

PHP, Symfony, JMSSerializerBundle.

Я хочу сериализовать объект User внутри объекта Organization по его идентификатору, но когда объект User принадлежит другим объектам, используйте сериализацию по умолчанию.

public class Organization {
   // type is User   
   $user;  -> "123123"
...
}

public class Other {
   // type is User   
   $user;  -> "{id: 123123, name: John, ...}"
...
}

Возможно ли это при разумных усилиях?


person Slava Shklyar    schedule 28.06.2017    source источник
comment
Привет. Не могли бы вы принять мой ответ, если он был полезен, или предложить некоторые изменения, если это необходимо :)   -  person Matko Đipalo    schedule 03.07.2017


Ответы (1)


Вы можете исключить объект User из сериализации и добавить виртуальное свойство, которое будет возвращать идентификатор пользователя (вы можете называть его userId, user или как хотите).

use JMS\Serializer\Annotation\VirtualProperty;
use JMS\Serializer\Annotation\Exclude;

public class Organization {

   /**
    * ...
    * @Exclude
    */ 
    $user;

  /**
   * @VirtualProperty
   * @SerializedName("user")
   */
   public function getUserId()
   { 
      return $this->user->getId(); 
   }
    ...
}
person Matko Đipalo    schedule 28.06.2017
comment
Я создал для этого кастомный тип, но ваш ответ, на мой взгляд, более понятен, поэтому я его принял. Спасибо! - person Slava Shklyar; 05.07.2017
comment
Благодарю вас! Вы можете написать свое решение внутри исходного вопроса. Это может быть полезно :) - person Matko Đipalo; 05.07.2017