简短的问题:我希望能够序列化一个还没有 ID 的
ApiResource
。
我最近从 v2.6 升级到 api-platform v3.2。曾经有用的“功能”之一是我可以序列化没有 ID 的资源。这对我来说非常有用,因为我经常序列化一个未持久化的实体,该实体在发送到客户端之前会输出到 HTML 表单。然后客户端根据需要对其进行操作。但在 v3.0 中我只是得到一个例外:
无法为该项目生成 IRI
在 v2.6 中,它会像这样序列化:
{
"@context": "/my/api/contexts/ResourceName",
"@id": "/my/api/resource/", // notice lack of actual ID value
...
}
我有一个自定义的
Normalizer
可以为我的应用程序执行某些操作,并且在其中我可以破解一些东西来制作它,这样就不会为具有 null ID 的资源生成 @id
,但这感觉不对.
// do not create IRI if the object has no ID; not sure of a better way to do this with api-platform v3.0+
if (method_exists($object, 'getId') && $object->getId() === null) {
$context['force_iri_generation'] = false; // undocumented var used for other purposes.
$context['iri'] = true; //str_replace('\\', '/', get_class($object)) . '/0'; // could be anything
}
您只需添加此属性即可避免生成 IRI
#[ApiProperty(genId: false)]