为了账号安全,请及时绑定邮箱和手机立即绑定

在JMS序列化器中混合访问器和SkipWhenEmpty

在JMS序列化器中混合访问器和SkipWhenEmpty

PHP
蛊毒传说 2021-05-13 21:34:59
我在一个项目中使用JMS序列化程序,而我正为一件事情而苦苦挣扎。我正在使用@Accessor批注(在DateTime属性上)仅回显日期,而没有时间。但是在我的某些对象上,我没有任何信息,并且我不希望在这种情况发生时输出日期密钥。没有@Accessor,我可以很容易@SkipWhenEmpty地在其他属性上完美使用它。但是看来我不能将两者混在一起吗?这是我的示例代码:composer.json:{    "require": {        "jms/serializer": "^1.14"    }}StackOverflowExample.php:<?phpdeclare(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,我仍然具有日期键。有什么我要忘记的吗?仅当填满日期字段时,如何才能回显日期字段?
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

根据我的研究,我认为您需要返回null而不是

返回 '';

在您的getDate函数中。


查看完整回答
反对 回复 2021-05-28
  • 1 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信