【问题标题】:What is the difference between the serializer virtualProperty and the accessor?序列化器 virtualProperty 和访问器有什么区别?
【发布时间】:2019-08-07 09:49:53
【问题描述】:

根据序列化程序 virtualProperty 文档

注意:这仅适用于序列化,完全被忽略 在反序列化期间。

除此限制外,使用virtualPropertyaccessor 有什么区别?

如果没有,为什么要使用它,因为accessor 没有这个限制。

【问题讨论】:

    标签: php symfony serialization jmsserializerbundle jms-serializer


    【解决方案1】:

    最好的解释有一个用于说明目的的具体示例。因此,我将尝试举例说明同时使用virtualPropertyaccessor 来展示它们的区别。

    我们有一个实体Person,它有许多不同的属性。其中之一是birthdate。我们来看例子:

    class Person
    {
        /**
         * @Accessor(getter="getFormattedBirthdate", setter="setBirthdate")
         */
        private $birthdate;
    
        public function setBirthdate(\DateTimeInterface $birthdate): self
        {
            $this->birthdate = $birthdate;
    
            return $this;
        }
    
        public function getBirthdate(): \DateTimeInterface
        {
            return $this->birthdate;
        }
    
        public function getFormattedBirthdate(): string
        {
            return $this->birthdate->format('j F Y');
        }
    
        /**
         * @VirtualProperty()
         */
        public function getAge(): int
        {
            $today = new \DateTime('today');
            $age = $today->diff($this->birthdate);
    
            return $age->y;
        }
    }
    

    我们使用 Accessor 来指定在序列化和反序列化期间分别使用哪个 getter 和 setter 方法。默认情况下会使用 getBirthdatesetBirthdate。但是,我们希望使用getFormattedBirthdate 进行序列化。

    VirtualProperty 帮助我们显示计算出的年龄。它将在序列化期间使用。因为它不是真正的属性,所以它没有设置器,反序列化它没有意义。

    我希望该示例有助于理解 AccessorVirtualProperty 之间的区别。

    【讨论】:

    • 是的,最好的解释有一个用于说明目的的具体示例。很好的答案。谢谢
    猜你喜欢
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2010-10-20
    • 2013-05-21
    相关资源
    最近更新 更多