【发布时间】:2015-08-09 05:34:35
【问题描述】:
我使用 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\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": []
},...
【问题讨论】:
标签: symfony serialization fosrestbundle jmsserializerbundle