如何在 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 一个替代结构,它将被序列化。
您可以使用 spl_object_hash()
或 spl_object_id()
,请参阅 SplObjectStorage::getHash()
如果您的自定义操作控制器 return 是 Api 平台托管实体的实例(或实例集合)而不是 Response
,该对象将自动使用您想要的序列化器配置进行序列化(使用您已经定义的相同序列化组等)。
如果您 return 而不是 Response
的实例,SerializeListener
将不会序列化它,只是 return 它不变。如果没有,它将序列化它。您可以看到它正在运行 here.
我有一个自定义操作,一旦调用,它会执行比简单地添加实体更多的任务。
这些操作的结果是创建一个新实体,然后将其持久保存在数据库中。
现在,作为 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 一个替代结构,它将被序列化。
您可以使用 spl_object_hash()
或 spl_object_id()
,请参阅 SplObjectStorage::getHash()
如果您的自定义操作控制器 return 是 Api 平台托管实体的实例(或实例集合)而不是 Response
,该对象将自动使用您想要的序列化器配置进行序列化(使用您已经定义的相同序列化组等)。
如果您 return 而不是 Response
的实例,SerializeListener
将不会序列化它,只是 return 它不变。如果没有,它将序列化它。您可以看到它正在运行 here.