我尝试使用jms序列化器(在单元测试中)将给定数组中的数据映射到对象,以测试一个学说实体:
给定是一个简单的实体类:
/**
* 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
答案 0 :(得分:1)
你好我认为你错过了cashPositionId的serialized_name属性,默认情况下jms会将属性从camel case转换为snake case。