我在一个项目中使用JMS序列化程序,而我正为一件事情而苦苦挣扎。
我正在使用@Accessor批注(在DateTime属性上)仅回显日期,而没有时间。但是在我的某些对象上,我没有任何信息,并且我不希望在这种情况发生时输出日期密钥。
没有@Accessor,我可以很容易@SkipWhenEmpty地在其他属性上完美使用它。但是看来我不能将两者混在一起吗?
这是我的示例代码:
composer.json:
{
"require": {
"jms/serializer": "^1.14"
}
}
StackOverflowExample.php:
<?php
declare(strict_types=1);
use JMS\Serializer\Annotation as Serializer;
class StackOverflowExample
{
/**
* @var \DateTime
* @Serializer\Accessor(getter="getDate")
* @Serializer\SkipWhenEmpty()
*/
private $date;
/**
* @var string
* @Serializer\SkipWhenEmpty()
*/
private $title;
public function getDate(): string
{
if (null === $this->date) {
return '';
}
return $this->date->format('Y-m-d');
}
public function setDate(\DateTime $date): void
{
$this->date = $date;
}
public function getTitle(): string
{
return $this->title;
}
public function setTitle(string $title): void
{
$this->title = $title;
}
}
执行时stackoverflow.php,这是它输出的数据:
{"date":"2019-05-03","title":"Example with date and title"}
{"date":"2019-05-03"}
{"date":"","title":"Example with title but no date"}
第一行是一个控件。
在第二行,当省略设置标题时,输出的json中没有“ title”键,这要归功于 @SkipWhenEmpty
但是在第三行,即使使用@SkipWhenEmpty,我仍然具有日期键。
有什么我要忘记的吗?仅当填满日期字段时,如何才能回显日期字段?
慕慕森