如何在 Api-Platform 中手动将资源序列化为 Json?

How to manually serialize a resource to Json in Api-Platform?

我有一个自定义操作,一旦调用,它会执行比简单地添加实体更多的任务。

这些操作的结果是创建一个新实体,然后将其持久保存在数据库中。

现在,作为 return 值,我目前正在使用刚刚创建的实体的 IRI。

我使用 \ApiPlatform\Core\Api\IriConverterInterface 生成 IRI。

这种方法有效但有一个缺点:在前端我必须发出新的调用来检索刚刚创建的实体的数据。

为了避免这个调用,我想简单地 return JSON 格式的实体,但我找不到立即将其序列化为 return 的方法它。

在实践中:我目前 return 只是实体的 IRI:根据其序列化配置,我如何 return 完全序列化的实体?

我不确定,如果您只是要求 php-内部 json-序列化:

https://www.php.net/manual/de/function.json-encode.php

只需实现 JsonSerializable 接口,即可将其包含在任何模型中-class。只是 return 一个替代结构,它将被序列化。

https://www.php.net/manual/de/class.jsonserializable.php

您可以使用 spl_object_hash()spl_object_id(),请参阅 SplObjectStorage::getHash()

如果您的自定义操作控制器 return 是 Api 平台托管实体的实例(或实例集合)而不是 Response,该对象将自动使用您想要的序列化器配置进行序列化(使用您已经定义的相同序列化组等)。

如果您 return 而不是 Response 的实例,SerializeListener 将不会序列化它,只是 return 它不变。如果没有,它将序列化它。您可以看到它正在运行 here.