我正在使用 Api-Platform 學習 OpenApi/Swagger API。我創建了一個新端點,它接受列舉值作為引數:
#[ApiResource(
itemOperations: [
'get_by_name' => [
'openapi_context' => [
....
'parameters' => [
[
'in' => 'header',
'name' => 'X-Server-Region',
'schema' => [
'type' => 'string',
'enum' => ['server1', 'server2'],
'example' => 'server1',
],
'description' => 'Server to select',
'required' => true
],
...
)]
但是,這是一個相當常見的引數,并且值可以經常更新(隨著添加更多服務器),我想使用某種模板。
所以我嘗試了:
<?php
namespace App\Enum;
enum Server: string
{
case SERVER1 = 'server1';
case SERVER2 = 'server2';
...
}
和
'enum' => [...Server::cases()],
要么
'enum' => [Server::class],
和許多其他形式的,無濟于事。
我試圖理解組件的概念,但找不到在 Symfony/Api 平臺中使用它們的方法。
我如何在不同的端點重用列舉?
uj5u.com熱心網友回復:
列舉對 PHP 來說是相當新的,它們還沒有被 Api-Platform 直接支持。
支持將會到來,但目前您必須在配置中手動明確列出每個案例。
雖然您也可以將“案例”串列存盤在類中的常量中(您甚至可以在其enum本身中執行此操作):
enum Server : string {
const CASES = ['server1', 'server2']
case SERVER1 = 'server1';
case SERVER2 = 'server2';
}
然后直接在注釋或屬性中使用該常量:
parameters' => [
[
'in' => 'header',
'name' => 'X-Server-Region',
'schema' => [
'type' => 'string',
'enum' => Server::CASES,
'example' => 'server1',
],
'description' => 'Server to select',
'required' => true
],
...這不會真正使用列舉優勢,因為您仍然需要在兩個地方編輯案例,而不僅僅是一個;并且只會方便注釋或屬性。如果您對 API 資源使用 XML 或 YAML 配置,那就不會那么好了。
uj5u.com熱心網友回復:
要在 Enum 支持可用之前暫時解決該問題,您可以創建一個具有資料原型的類,以便在 API 中重用它。通過這種方式,您可以重復使用相同的資料集而無需復制它。這將使您將來的作業更輕松。
因此,您可以像這樣創建資料原型:
class Server
{
public const PROTOTYPE = [ 'select1', 'select2', 'select3'];
}
匯入 calss,然后在您的注釋中呼叫它,如下所示:
'enum' => Server::PROTOTYPE,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/449567.html
標籤:php 交响乐 枚举 api-platform.com php-8.1
上一篇:c#DataTabletodict多列(例如pythondataframe.to_dict("record"))
