如何删除循环引用处理程序 (Symfony 4) 的弃用消息?

How can I remove deprecated message for circular reference handler (Symfony 4)?

我正在尝试删除此错误消息:

User Deprecated: The "Symfony\Component\Serializer\Normalizer\AbstractNormalizer::setCircularReferenceHandler()" method is deprecated since Symfony 4.2, use the "circular_reference_handler" key of the context instead.

这是我的代码:

 $encoder = new JsonEncoder();
    $normalizer = new ObjectNormalizer();
    $normalizer->setCircularReferenceHandler(function ($object, string $format = null, array $context = []) {
        return $object->getName();
    });

我做了一个作曲家更新和清除缓存。但没有任何帮助。

您应该使用它 (circular_reference_handler) 作为配置键。 例如,

serializer:
    circular_reference_handler: App\Service\YourHandlerService

我在 framework.yaml 中尝试过,它有效。

错误消息告诉你应该在 defaultContext 数组中给出它,你可以将它作为构造函数中的第三个参数。

public function __construct(ClassMetadataFactoryInterface 
$classMetadataFactory = null, NameConverterInterface $nameConverter = null, array $defaultContext = array())

你的情况是:

$encoders = array(new JsonEncoder());
$normalizer = new JsonSerializableNormalizer(null,null,array(JsonSerializableNormalizer::CIRCULAR_REFERENCE_HANDLER=>function ($object) {
    return (string)$object;
}));

编辑:
我使用的是 JsonSerializableNormalizer 而你使用的是 ObjectNormalizer 那么构造函数定义是:

public function __construct(ClassMetadataFactoryInterface $classMetadataFactory = null, NameConverterInterface $nameConverter = null, PropertyAccessorInterface $propertyAccessor = null, PropertyTypeExtractorInterface $propertyTypeExtractor = null, ClassDiscriminatorResolverInterface $classDiscriminatorResolver = null, callable $objectClassResolver = null, array $defaultContext = array())

并在您的程序中使用它应该是:

$normalizer = new ObjectNormalizer(null,null,null,null,null,null,array(ObjectNormalizer::CIRCULAR_REFERENCE_HANDLER=>function ($object) {
    return (string)$object;
}));