JMS 序列化程序忽略学说实体 ID

JMS serializer ignores doctrine entity id

我尝试使用 jms 序列化程序(在单元测试中)将数据从给定数组映射到对象以测试学说实体:

给出的是一个简单的实体class:

/**
 * CashPosition
 */
class CashPosition
{
    /**
     * @var integer
     */
    protected $cashPositionId;

    /**
     * @var \DateTime
     */
    protected $date;

    /**
     * @var float
     */
    protected $value;


    /**
     * Get cashPositionId
     *
     * @return integer
     */
    public function getCashPositionId()
    {
        return $this->cashPositionId;
    }

    /**
     * Set date
     *
     * @param \DateTime $date
     *
     * @return $this
     */
    public function setDate($date)
    {
        $this->date = $date;

        return $this;
    }

    /**
     * Get date
     *
     * @return \DateTime
     */
    public function getDate()
    {
        return $this->date;
    }

    /**
     * Set value
     *
     * @param string $value
     *
     * @return $this
     */
    public function setValue($value)
    {
        $this->value = $value;

        return $this;
    }

    /**
     * Get value
     *
     * @return float
     */
    public function getValue()
    {
        return $this->value;
    }
}

我在Resources\config\serializer\Entity下定义了序列化。CashPosition.yml

MyBundle\Entity\CashPosition:
  exclusion_policy: ALL
  access_type: public_method
  properties:
    cashPositionId:
      exclude: false
      expose: true
      type: integer
      access_type: property
    date:
      exclude: false
      expose: true
      type: DateTime<'Y-m-d'>
    value:
      exclude: false
      expose: true
      type: float

并尝试通过序列化测试来解决这个问题:

public function testSerialization()
{
    $data = [
        'cashPositionId' => 1,
        'date'           => date('Y-m-d'),
        'value'          => 1.0,
    ];

    /* @var $serializer Serializer */
    $serializer = $this->container->get('serializer');

    $cashPosition = $serializer->fromArray($data, CashPosition::class);
    $this->assertInstanceOf(CashPosition::class, $cashPosition);
    $this->assertEquals($data, $serializer->toArray($cashPosition));
}

但是测试失败,因为 fromArray 方法没有设置 cashPositionId。我尝试了一些不同的访问类型配置,但没有成功。我不确定这里有什么问题。

我正在使用以下版本的 jms 序列化程序:

jms/metadata                            1.6.0   Class/method/property metadata management in PHP
jms/parser-lib                          1.0.0   A library for easily creating recursive-descent parsers.
jms/serializer                          1.6.2   Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.
jms/serializer-bundle                   1.4.0   Allows you to easily serialize, and deserialize data of any complexity

你好,我想你错过了 cashPositionId 的 serialized_name 属性,默认情况下,jms 会将属性从驼峰式转换为蛇式。

JMS Doc