为了解释我的问题,我设置了一个非常简单的ApiResource,它使用自定义状态提供程序。
#[ApiResource(
types: 'https://schema.org/UpdateAction',
provider: TransitionStateProvider::class,
)]
class Transition
{
#[ApiProperty(
identifier: true,
types: ['https://schema.org/identifier'],
)]
public int $id;
}
字符串
我的州供应商:
class TransitionStateProvider implements ProviderInterface
{
public function provide(Operation $operation, array $uriVariables = [], array $context = []): object|array|null
{
$transition = new Transition();
$transition->id = 1;
return $transition;
}
}
型
当我发送一个get请求时,@context、@id、@types并没有按照我想要的那样设置。我得到:
{
"@context": {
"@vocab": "https://localhost/docs.jsonld#",
"hydra": "http://www.w3.org/ns/hydra/core#"
},
"@type": "Transition",
"@id": "/.well-known/genid/66dae3d5fb3332ca13ee",
"id": 1
}
型
我想要的是:
{
"@context": "/contexts/Transition",
"@id": "/transitions/1",
"@type": "https://schema.org/UpdateAction",
"id": 1
}
型
它与我的其他资源一起工作,但它们使用stateOptions
链接到一个教义实体。这个Transition
资源不是。
我尝试在ApiProperty中设置identifier:true
,我尝试使用uriTemplate
,urivariables
和hydraContext
,但没有成功。
我配置错了什么?
1条答案
按热度按时间eaf3rand1#
您可以尝试创建一个custom normalizer来修改序列化过程,并确保
@context
、@id
和@type
按照您的需要进行设置。字符串
将自定义规范器定义为服务,将tag it定义为
serializer.normalizer
。这将确保它在Symfony Serializer component中注册。型
的数据
并更新
Transition
类上的ApiResource
annotation以利用自定义规范化器。型
你得到的工作流程:
型
你更新的代码与上面的建议:
型