嘿,就在一个小时前,我问了一个关于symfony 4.2的序列化程序中新的circle_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)
中没有提及此上下文密钥或其实现方式。
如果我使用上一个问题的circle_reference_handler的示例,则将上下文密钥添加到framework.yaml文件中的以下位置:
our_list <- list(
data.frame(
NAME = 1:4,
TIME = c(20L, 30L, 15L, 12L),
AMOUNT = c(456L,-234L, -13L, 267L)
),
data.frame(
NAME = 1:4,
TIME = c(20L, 30L, 15L, 12L),
AMOUNT = c(-6L, 23L, -13L, -26L)
)
)
并创建类
framework:
serializer:
max_depth_handler: 'App\Serializer\MyMaxDepthHandler'
为了使序列化程序使用此处理程序,我为序列化函数设置了上下文:
namespace App\Serializer;
class MyMaxDepthHandler
{
public function __invoke($object){
//TODO how to handle this
}
}
现在我的问题是我该如何处理?有人在这个__invoke函数的主体中放一个例子吗?
任何帮助将不胜感激
答案 0 :(得分:0)
所以我只需这样做:
<p>product: (<%= (int)request.getParameter("val1") %> * <%= (int)request.getParameter("val2") %>)</p>
关于__invoke内部的代码,您可以返回实际上需要的任何数据。例如,只需返回相关对象的ID。在某些情况下对输出json有用 并且您需要像这样更新__invoke方法:
<?php
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
$this->serializer->serialize($object, 'json', [ObjectNormalizer::ENABLE_MAX_DEPTH => true, ObjectNormalizer::MAX_DEPTH_HANDLER => new MyMaxDepthHandler()]);
您可以在文档的Handling Serialization Depth部分中找到详细的说明
我猜想序列化程序会在调用 serialize 方法时在内部调用 normalize 来结束,但请仔细检查一下。如果不是这种情况,可以在此解决方案不起作用的情况下直接调用 normalize 方法。因为该文档仅提供 normalize
的示例