Сериализация черт с JMSSerializer
При попытке сериализации модели, использующей признаки, JMSSerializer не сериализует свойства, включенные в эту характеристику. Я использую yaml для настройки сериализатора, но кажется, что он не работает.
trait IdentityTrait
{
protected $id;
public function setId($id)
{
$this->id = $id;
return $this;
}
public function getId()
{
return $this->id;
}
}
class OurClass {
use IdentityTrait;
protected $test;
public function getTest() {
$this->test;
}
}
JMSSerializerBundle используется и следующий yaml находится в Resources/config/serializer/Model.Traits.IdentityTrait.yml
MyProject\Component\Core\Model\Traits\IdentityTrait:
exclusion_policy: NONE
properties:
id:
expose: true
И OurClass
Конфигурация находится в Resources/config/serializer/Model.OurClass.yml
MyProject\Component\Core\Model\OurClass:
exclusion_policy: NONE
properties:
test:
expose: true
Некоторый код был проигнорирован, чтобы сосредоточиться на проблеме
1 ответ
Особенности PHP введены начиная с PHP 5.4.0, последний код JMSSerializer поддерживает PHP 5.3.2. Заметка "require": {"php": ">=5.3.2",
Просматривая код, эта функция не поддерживается (пока). Эта проблема очень связана с этой проблемой на github JMSSerializer.
Можно сериализовать с чертой:
<?php
namespace AppBundle\Entity;
use JMS\Serializer\Annotation\Expose;
use JMS\Serializer\Annotation\Groups;
use JMS\Serializer\Annotation\Type;
trait EntityDateTrait
{
/**
* @var \DateTime
*
* @ORM\Column(name="created_at", type="datetime", nullable=true)
* @Expose()
* @Groups({"DeploymentListing", "DeploymentDetails"})
* @Type("DateTime")
*/
protected $createdAt;
/**
*
* @var \DateTime
*
* @ORM\Column(name="updated_at", type="datetime", nullable=true)
* @Expose()
* @Groups({"DeploymentListing", "DeploymentDetails"})
* @Type("DateTime")
*/
protected $updatedAt;
/**
* @ORM\PrePersist()
*
* Set createdAt.
*/
public function setCreatedAt()
{
$this->createdAt = new \DateTime();
}
/**
* Get createdAt.
*
* @return \DateTime
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* @ORM\PreUpdate()
*
* Set updatedAt.
*
* @return Campaign
*/
public function setUpdatedAt()
{
$this->updatedAt = new \DateTime();
}
/**
* Get updatedAt.
*
* @return \DateTime
*/
public function getUpdatedAt()
{
return $this->updatedAt;
}
}
Не забудьте добавить @type в поля.