通过Symfony的自定义Doctrine类型内的依赖注入使用Symfony的序列化器[重复]

问题描述 投票:0回答:1

我在symfony中创建了自定义的教义类型,扩展了Doctrine\DBAL\Types\Type

我需要在此处注入symfony的序列化器,以使用symfony的序列化器解码一些JSON,以便它可以编译特定的类。

但是,由于它是最终的,所以我无法覆盖该构造函数,并且不能注入SerializerInterface

我尝试使用二传手并注入SerializerInterface,但不起作用。

class MyCustomDoctrineType extends Type
{

    private const NAME = 'my_custom_type';

    /**
     * {@inheritdoc}
     */
    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
    {
        return $platform->getJsonTypeDeclarationSQL($fieldDeclaration);
    }

    /**
     * {@inheritdoc}
     */
    public function convertToDatabaseValue($value, AbstractPlatform $platform)
    {
        if ($value === null) {
            return null;
        }

        return $value;
    }


    /**
     * {@inheritdoc}
     */
    public function convertToPHPValue($value, AbstractPlatform $platform)
    {
        if ($value === null || $value === '') {
            return null;
        }

        if (is_resource($value)) {
            $value = stream_get_contents($value);
        }

        $this->serializer->deserialize($value, MyClass::class, 'json'); // this is what I want to accomplish

        return $value;
    }

    public function requiresSQLCommentHint(AbstractPlatform $platform)
    {
        return true;
    }


    public function getName()
    {
        return self::NAME;
    }
}

那里有什么方法可以进行依赖注入吗?

symfony doctrine
1个回答
0
投票
正如@emix所指出的,在Symfony 4中,您可以覆盖Kernel.php中的boot()函数,并从那里手动注入依赖项

public function boot() { parent::boot(); \Doctrine\DBAL\Types\Type::getType('my_type_name')->setSerializer($this->container->get('serializer')); }

© www.soinside.com 2019 - 2024. All rights reserved.