我有一个php类,其中一个属性使用DateTimeInterface。其他属性是string、int等。
php类
#[ORM\Column(type: Types::DATE_MUTABLE)]
private ?\DateTimeInterface $eff_date = null;
在我的控制器中,我处理一些CSV数据来填充类(标题行后面跟着多个数据行)。
$encoders = [new CsvEncoder()];
$normalizers = [new ObjectNormalizer(), new DateTimeNormalizer()];
$serializer = new Serializer($normalizers, $encoders);
两个步骤的过程通常有效(单个反序列化步骤无效)
1.解码步骤
1.反规格化步骤
$output = $serializer->decode($data,'csv');
dump($output);
$an_object_array = [];
foreach($output as $item) { //foreach element in $arr
$an_object = $serializer->denormalize($item, Rmk::class);
$an_object_array[] = $an_object;
}
dd($an_object_array);
如果我将属性设置为字符串,序列化工作正常。
如果没有,我会得到以下错误。
无法对类“App\Entity\Rmk”的属性“EFF_DATE”值进行反规范化:属性路径“EFF_DATE”中给定的参数应为“?DateTimeInterface”类型,“字符串”。
1条答案
按热度按时间fcg9iug31#
找到了解决办法。
1.更改了实体中的setter方法,以接受字符串作为输入,并从该字符串创建日期时间对象。
1.校正规格化器
1.也切换到单个反序列化步骤。