Symfony/条令反序列化时间
我已在我的条令实体中创建了以下字段:Symfony/条令反序列化时间,symfony,serialization,time,doctrine,Symfony,Serialization,Time,Doctrine,我已在我的条令实体中创建了以下字段: /** * @ORM\Column(type="time") * @Groups({"default"}) */ private $timeFrom; 我正在尝试使用以下代码反序列化实体: $workingDays = $serializer->deserialize($json, WorkingDay::class, 'json', array('groups' => array('default'))); 我试过javascript
/**
* @ORM\Column(type="time")
* @Groups({"default"})
*/
private $timeFrom;
我正在尝试使用以下代码反序列化实体:
$workingDays = $serializer->deserialize($json, WorkingDay::class, 'json', array('groups' => array('default')));
我试过javascript中的几种时间/日期时间格式,但Symfony似乎没有反序列化它们
我的问题是:Symfony想要什么类型的格式作为反序列化到时间的输入?从序列化程序的文档看,在实例化
$Serializer
实例时,需要包含DateTimeNormalizer
()
$normalizers = [
...,
new DateTimeNormalizer(),
];
$serializer = new Serializer(normalizers, [new JsonEncoder()]);
然后,用你问题中的那句话。理论上,它应该是有效的,但当时我无法测试它。你能做到吗
DateTimeNormalizer
使用RFC3339格式,根据它,这是一个正确格式值的示例:1985-04-12T23:20:50.52Z
更新:
为了让它工作,正如我在上面所假设的,您需要在序列化程序的规范化程序列表中包含DateTimeNormalizer
。然而,这正是它变得棘手的地方
DateTimeNormalizer
,否则,您将得到令人不安的误导性missingConstructor或argumentsException
字符串
反规范化为日期时间
。为此,ObjectNormalizer
有一个类型提取器,用于查找有关底层类型的更多信息。类型可以通过多种方式发现,但我假设您的操作将通过或完成
现在,举个例子:
// Prepare the data in form of JSON string
$incomingData = [
'id' => 1337,
'time' => '2018-07-24T01:29:50.00Z',
'info' => 'Lorem ipsum'
];
$rawData = json_encode($incomingData);
$classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
// Very important to set type extractor
$normalizer = new ObjectNormalizer($classMetadataFactory, null, null, new PhpDocExtractor());
$normalizers = [
new DateTimeNormalizer(),
$normalizer,
];
$serializer = new Serializer($normalizers, [new JsonEncoder()]);
$myObject = $serializer->deserialize($rawData, FooObject::class, 'json');
var_dump($myObject);
这产生了:
object(App\Data\FooObject)[3333]
private 'id' => int 1337
private 'time' =>
object(DateTime)[3540]
public 'date' => string '2018-04-12 23:20:50.520000' (length=26)
public 'timezone_type' => int 2
public 'timezone' => string 'Z' (length=1)
private 'info' => string 'Lorem ipsum' (length=11)
希望这会有所帮助……可能看起来很明显,但您是否将该属性的setter和getter添加到实体中,因为它是私有的?当您反序列化它时,会发生什么?空值,不正确的值?它给了我一个错误。属性路径构造函数需要“Symfony\Component\PropertyAccess\PropertyPath”的字符串或实例。得到了:“整数。是的,我增加了接球手和二传手。但这不是我真正的问题。我只是想知道我必须在JSON中输入什么时间格式。你如何实例化你的
$serializer
?我将在明天试一试!提前谢谢。使用此设置时,我会遇到完全相同的错误。序列化程序希望我提供什么类型的字段?我是否像datetime字符串一样提供时间?或者一个不同的字符串,比如'08:00:00'。我两次都试过了,但它给了我相同的错误信息。抱歉,我还没有来测试这个。我打算在几个小时内完成这项工作,并更新我的答案……苏,我花了一段时间才尝试,但我还是成功了。正在更新答案。。。