如何删除循环引用处理程序 (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;
}));
我正在尝试删除此错误消息:
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;
}));