我想用一个自定义的反规范化器来修饰Symfony序列化器的ArrayDenormalizer,但是它似乎遇到了DependencyInjection中的循环引用问题,因为Nginx在502中崩溃。
自定义的Denormalizer实现了DenormalizerAwareInterface,所以我实际上期望Symfony会通过Autowiring自动处理依赖注入。
<?php
namespace App\Serializer;
use App\MyEntity;
use Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface;
use Symfony\Component\Serializer\Normalizer\DenormalizerAwareTrait;
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
class PreCheckRequestDenormalizer implements DenormalizerInterface, DenormalizerAwareInterface
{
use DenormalizerAwareTrait;
public function denormalize(mixed $data, string $type, string $format = null, array $context = [])
{
if (in_array($data['locale'], ['de', 'en']) === false) {
$data['locale'] = 'en';
}
return $this->denormalizer->denormalize($data, $type, $format, $context);
}
public function supportsDenormalization(mixed $data, string $type, string $format = null)
{
return is_array($data) && $type === MyEntity::class;
}
}
我错过了什么?顺便说一句,这是Symfony 6. 1。
1条答案
按热度按时间tktrz96b1#
这似乎是Symfony 6.1中 NormalizeAwareInterface 自动安装的一个错误:https://github.com/symfony/maker-bundle/issues/1252#issuecomment-1342478104
此错误导致循环引用问题。
我通过不使用 DenormalizerAwareInterface 和 DenormalizerAwareTrait 以及禁用自定义Denormalizer的自动装配并显式声明服务来解决这个问题:
这个问题的评论描述了可能进一步的其他方式,但这为我解决了它。