我正在学习带有 Api-Platform 的 OpenApi/Swagger API。我创建了一个新的endpoint,它接受枚举的值作为参数:
#[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平台中使用它们的方法。
如何在不同的endpoint重用枚举?
要在 Enum 支持可用之前暂时解决问题,您可以创建一个包含数据原型的类,以便在 API 中重用它。这样,您可以重复使用相同的数据集,而无需复制它。这将使您将来的工作更轻松。
所以你创建了一个数据的原型,像这样:
class Server
{
public const PROTOTYPE = [ 'select1', 'select2', 'select3'];
}
导入类,然后在注释中调用它,如下所示:
'enum' => Server::PROTOTYPE,
枚举对于PHP来说是相当新的,Api平台还没有直接支持它们。
支持将会到来,但目前您必须在配置上手动明确列出每种情况。
虽然您也可以将“cases”列表存储在类的常量中(您甚至可以在< code>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
],
...这并没有真正利用enum的优势,因为您仍然需要在两个地方编辑案例,而不仅仅是一个地方;并且仅对注释或属性是方便的。如果您对API资源使用XML或YAML配置,那就没那么好了。
我正在努力为Symfony Api平台中使用的请求正文获得正确的定义: 从上图中,我的endpoint期望的是包含必需值的JSON。我将必需值定义在中,但这不是真的,它们甚至不属于:、或。 我尝试了两种定义(并且删除了一些与解决方案无关的行): 第二个定义看起来像: 结果如下: 他们似乎都没有做我需要或期望的事情,我做错了什么?我能得到一些帮助吗? 我也读了几页/帖子,但没有找到一个好的例子或正确
我正在使用从以下依赖项导入的Swagger/OpenAPIV3注释创建应用程序的API描述: 其中一个批注是批注,它接受名为的属性,该属性允许字符串数组: 现在,我想使用在枚举类上构造的自定义方法,该方法返回允许的字符串数组,因此不需要在每次向枚举添加类型时添加该方法。以便我们可以这样使用它: 现在这是无法编译的,因为在执行注释时不知道该方法。是否有这样的解决方案允许在SwaggerV3注释属性值
我配置了以下UserDataPersister(直接取自教程): 和以下用户夹具: 但是我在加载这个夹具时会出现错误: 我的UserDataPersister实现与此相同。
我有多个请求体需要使用相同的枚举,但我很难跨多个模式引用单个定义。 在我的< code>openapi.yaml文件中,我包含了: 在我为 POST/PUT 请求设置的正文定义中,我包括: 但在生成的代码中,正在创建的是: 而一个单独的类是使用以下命令创建的: 如何跨文件创建对枚举定义的引用?
我正在使用OpenCV和JsonCpp在C++中创建一个库,以便为Android和iOS创建一个库。 在为Android测试我的库时,我正在制作JNI文件,但当我尝试加载库时,我得到了 这是因为我认为我的Json库构建得不是很好。 我使用的库是这样的:https://github.com/open-source-parsers/jsoncpp 我的Android.mk是: 即使我编译了JsonCp