gpt4 book ai didi

symfony 4.2 max_depth_handler 序列化器如何实现?

转载 作者:行者123 更新时间:2023-12-04 17:40:36 26 4
gpt4 key购买 nike

嘿,就在一个小时前,我问了一个关于 symfony 4.2 序列化器中新的 circular_reference_handler 的问题。

( use the "circular_reference_handler" key of the context instead symfony 4.2 )

这个问题的答案让我想到了一个新问题,即达到的最大嵌套级别。

在文档中 ( https://symfony.com/doc/current/components/serializer.html#handling-serialization-depth )

没有提及此上下文键或如何实现它。

如果我使用上一个问题的 circular_reference_handler 示例,我将在以下 framework.yaml 文件中添加上下文键:

framework:
serializer:
max_depth_handler: 'App\Serializer\MyMaxDepthHandler'

并创建类

namespace App\Serializer;


class MyMaxDepthHandler
{
public function __invoke($object){
//TODO how to handle this
}
}

为了让序列化程序使用这个处理程序,我为序列化函数设置了上下文:

$this->serializer->serialize($object, 'json', ['enable_max_depth' => true]);

现在我的问题是我该如何处理?有没有人举例说明在这个 __invoke 函数的主体中放入什么?

任何帮助将不胜感激

最佳答案

所以我会简单地这样做:

<?php

use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;

$this->serializer->serialize($object, 'json', [ObjectNormalizer::ENABLE_MAX_DEPTH => true, ObjectNormalizer::MAX_DEPTH_HANDLER => new MyMaxDepthHandler()]);

关于__invoke里面的代码,其实你需要什么数据都可以返回。例如只返回相关对象的 id。在某些情况下对输出 json 很有用你需要像这样更新你的 __invoke 方法:

<?php

namespace App\Serializer;

class MyMaxDepthHandler
{
public function __invoke($innerObject, $outerObject, string $attributeName, string $format = null, array $context = []){
return $innerObject->id;
}
}

您可以在 Handling Serialization Depth 中找到详细的解释文档部分

我猜当您调用 serialize 方法时,Serializer 通过在内部调用 normalize 结束,但请仔细检查它。如果不是这种情况,可以直接调用 normalize 方法,以防此解决方案不起作用。因为文档仅提供了 normalize

的示例

关于symfony 4.2 max_depth_handler 序列化器如何实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54646746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com