使用 Api 平台创建自定义集合 URI (uriTemplate)

问题描述 投票:0回答:1

在 API Platform 3 中,我有一个名为 Report 的 PHP 实体。 我想提供两种检索集合的方法:

/reports: the standard URI generated by API Platform.
/admin/reports: an additional URI with a specific normalizationContext.

但是,当我实现这段代码时,我只能获得一个集合,而不是两者都获得。

enter image description here

<?php

...

#[ORM\Entity(repositoryClass: ReportRepository::class)]
#[ApiResource(
    uriTemplate: '/admin/reports{._format}',
    operations: [
        new GetCollection(security: "is_granted('ROLE_ADMIN')"),
        new Get(security: "is_granted('ROLE_ADMIN')"),
        new Patch(security: "is_granted('ROLE_ADMIN')"),
    ],
    normalizationContext: [
        AbstractNormalizer::GROUPS => ['Report:read:admin'],
    ],
    denormalizationContext: [
        AbstractNormalizer::GROUPS => ['Report:write:admin'],
    ],
    order: ['createdAt' => 'DESC']
)]
#[ApiResource(
    operations: [
        new GetCollection(),
        new Post(),
        new Get(
            security: 'object.getCreatedBy() == user',
            controller: NotFoundAction::class, 
            read: false, 
            output: false
        )
    ],
    normalizationContext: [
        AbstractNormalizer::GROUPS => ['Report:read'],
    ],
    denormalizationContext: [
        AbstractNormalizer::GROUPS => ['Report:write'],
    ],
    order: ['createdAt' => 'DESC']
)]
class Report
{
    ...
symfony api-platform.com
1个回答
0
投票

要在 API Platform 3 中实现多个集合 URI,关键在于正确配置资源,以允许 /reports/admin/reports 集合与不同的规范化上下文共存。

在您当前的设置中,问题在于您在同一个类上定义了两个 #[ApiResource] 属性,API Platform 将其解释为冲突的配置。要解决此问题,您需要在单个 #[ApiResource] 声明中使用自定义操作定义不同的 URI。

我能理解的..,如果我假设错误,请随时纠正我,并解释。

© www.soinside.com 2019 - 2024. All rights reserved.