我使用Symfony2,FOSRestBundle和JMS Serializer创建了一个Web服务。 Web服务客户端正在处理时间戳而不是ISO格式化日期时间。
我希望JMS Serializer将输入从时间戳转换为DateTimes,并将DateTimes的输出转换为时间戳。
我尝试将此注释放在我的属性上:
/**
* Start of validity
*
* @var \DateTime
*
* @ORM\Column(name="validityStart", type="datetime", nullable=true)
*
* @Assert\Type(type="integer",message="Validity dates must be timestamps. [{{ value }}] is incorrect.")
*
* @Serializer\Expose()
* @Serializer\Groups({"ticket_detail","ticket_list"})
* @Serializer\Type("DateTime<'U'>")
*
*/
private $validityStart;
当我这样做时,我在表单验证时收到此错误:
"validityStart": {
"errors": [
"This value is not valid."
],
"children": {
"date": {
"children": {
"year": [],
"month": [],
"day": []
}
},
"time": {
"children": {
"hour": [],
"minute": []
}
}
}
您是否了解我如何让JMS Serializer完成这项工作?
编辑: @Serializer \ Type注释在输出上运行良好。但我仍然有输入问题......
编辑2:这是我的表单构建器
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('validityStart', 'datetime',
array( 'format'=>'U',
'required'=>false,
'description'=>'The message validity start timestamp')
)
->add('validityEnd', 'integer',
array( 'required'=>false,
'description'=>'The message validity end timestamp')
)
;
}
我尝试了两种方法,第二种方式似乎有效!但是在通过表单验证后我收到了这个错误:
"message": "Error: Call to a member function format() on a non-object",
"class": "Symfony\\Component\\Debug\\Exception\\FatalErrorException",
"trace": [
{
"namespace": "",
"short_class": "",
"class": "",
"type": "",
"function": "",
"file": "/var/www/symfony/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeType.php",
"line": 53,
"args": []
},...
答案 0 :(得分:0)
对于您的问题,我会使用虚拟财产,而不是暴露原始属性。 也许不是最佳实践,但我认为你也可以覆盖get函数并将其转换为。