在 API 平台中,我想从文档中隐藏一些操作。所以我做了找不到操作并设置了
openapi: false
#[ApiResource(
[…]
operations: [
new Delete( controller: NotFoundAction::class,
openapi: false,
read: false,
output: false
)
]
)]
文档中仍然显示操作,我还需要做更多的事情吗?
我使用Api-Platform 3.2.5,缓存文件夹已被删除并再次预热¡.
在您的示例中,您有一些相互冲突的配置,这使得您不清楚您想要发生什么。
您希望操作存在,但不显示在生成的文档中?
简单地做(这来自我为不同的东西设置的示例,所以忽略其他操作):
#[ApiResource(operations: [
new Get(
provider: PingProvider::class,
),
new Post(
input: CreatePing::class,
messenger: 'input',
),
new Delete(
openapi: false,
)
])]
readonly class Ping
{
public function __construct(
public string $id,
public string $message = 'pong'
) { }
}
但是,
DELETE
操作仍然存在,尽管它不会被记录。但人们可以打电话给DELETE /pings/123
,据说它会起作用。
或者也许您想完全删除
DELETE
操作?
然后简单地省略来自
operations
数组的操作:
#[ApiResource(operations: [
new Get(
provider: PingProvider::class,
),
new Post(
input: CreatePing::class,
messenger: 'input',
)
])]
readonly class Ping
{
public function __construct(
public string $id,
public string $message = 'pong'
) {}
}
但是这一次
DELETE
操作将完全停止工作。它不仅没有记录,而且调用 DELETE /pings/123
会导致 405
响应(“方法不允许”)。
在这种情况下,其他选项更加令人困惑。特别是
controller: NotFoundAction::class
那个。如果想要在文档中显示该操作,启用该操作,但不允许访问任何结果,则可以使用此选项,因此任何调用都会导致 404
(“找不到资源”)。完全不清楚为什么在这种情况下你会想要这个。
对于
read: false
和 output: false
也可以这样说。虽然这可以想象在这种情况下使用......但不清楚为什么你想要这个,或者它与问题有什么关系。
您提到您的配置不适合您。很抱歉,但是显示的配置将导致该操作不会显示在结果文档中。如果您的情况并非如此,则更有可能是其他原因(未包含在问题中)导致了您所说的结果。