2015-06-13 2 views
1

У меня есть метод, который возвращает значение:Включить метод, когда объект сериализации в JMS

/** 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="PersonRepository") 
*/ 
class Person { 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    public function getFoo(){ 
     return $this->id + 1; 
    } 

//setters & getters 

} 

Я хотел бы, чтобы включить значение, которое getFoo() возвращается, когда я сериализовать Person объект, так что это будет выглядеть это:

{ 
    'id' : 25 
    'foo' : 26 
} 

ответ

1

Вам нужно установить @VirtualProperty и @SerializedName.

use JMS\Serializer\Annotation\VirtualProperty; 
use JMS\Serializer\Annotation\SerializedName; 

class Person { 
    .... 
    .... 
    .... 

    /** 
    * @VirtualProperty 
    * @SerializedName("foo") 
    */ 
    public function getFoo(){ 
     return $this->id + 1; 
    } 

    .... 
    .... 
    .... 
} 

Вы можете прочитать об этом здесь: http://jmsyst.com/libs/serializer/master/reference/annotations

Обратите внимание, что это работает только для сериализации и не для десериализации.

+0

Спасибо! это сработало. просто нужно было сначала импортировать 2 класса. использование JMS \ Serializer \ Annotation \ VirtualProperty; использование JMS \ Serializer \ Annotation \ SerializedName; – schizoskmrkxx

+0

А, да, они нужны :) –

Смежные вопросы