【问题标题】:Jms Serializer don't call constructorJms 序列化器不调用构造函数
【发布时间】:2017-11-10 17:12:01
【问题描述】:

我正在使用带有 JMS 序列化器的 Symfony 2.8,当我使用反序列化器方法时,不会调用我的实体类的构造函数。查看我的代码:

我的服务.yml

jms_serializer.unserialize_object_constructor:
    class: AppBundle\Serializer\ObjectConstructor

我的对象构造器

<?php

namespace AppBundle\Serializer;

use JMS\Serializer\VisitorInterface;
use JMS\Serializer\Metadata\ClassMetadata;
use JMS\Serializer\DeserializationContext;
use JMS\Serializer\Construction\ObjectConstructorInterface;

class ObjectConstructor implements ObjectConstructorInterface
{

    /**
     * {@inheritdoc}
     */
    public function construct(VisitorInterface $visitor, ClassMetadata $metadata, $data, array $type, DeserializationContext $context ) {

        $className = $metadata->name;

        return new $className();
    }
}

我的班级的构造函数:

public function __construct() {

    $this->dateTime = new \DateTime();
}

有什么想法吗?

【问题讨论】:

    标签: php symfony symfony-2.8 jmsserializerbundle jms-serializer


    【解决方案1】:

    你应该像这样为你的自定义构造函数服务起别名

    jms_serializer.object_constructor:
        alias: your_service_id
    

    【讨论】:

    • 现在如果我在 ObjectConstructor 中添加构造方法,但不会调用 ObjectConstructor 类的方法构造。
    【解决方案2】:

    也许它已经过时了,但是您的 ObjectConstructor 的方法名称错误 construct 而应该是 __construct()。可能这就是它没有被调用的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      相关资源
      最近更新 更多