reinfi/openapi-models

从openapi定义生成PHP模型


README

此库不提供任何客户端或服务器实现用于您的open api定义。它只是生成您模式中定义的模型。

此库可能不是所有openapi定义的完整特性。如果您缺少某个特性,请提交一个问题。

原因?

有一些常见的open api生成器,如 JanePHPOpenAPI Generator,但由于它们需要向后兼容,它们创建了旧的PHP语法。

  • 无只读对象
  • 无构造器提升属性
  • 无类型属性,除PHPDoc外

这就是为什么这个库存在,就是为了简单地用新的PHP语法生成模型。

安装

使用composer将其作为开发依赖项安装。

composer require --dev reinfi/openapi-models

用法

默认配置文件是 openapi-models.php

您的配置文件应返回一个包含以下设置的数组

return [
    'paths' => [__DIR__ . '/spec'], # array of path to check for openapi files
    'outputPath' => __DIR__ . '/output', # output directory
    'namespace' => 'Api', # namespace for generated classes, can be empty
    'clearOutputDirectory' => true, # to remove all files in output directory, default is false
    'dateTimeAsObject' => false, # date/date-time definition will be `string` otherwise `DateTimeInterface`.
    'dateTimeFormat' => 'Y-m-d H:i:s', # format for serialize of date time fields
];

生成

要生成您的文件,只需运行 php vendor/bin/openapi-models generate

如果您想将配置存储在其他位置,您需要向命令提供文件名。

php vendor/bin/openapi-models generate --config spec/openapi-models.php

验证

要验证您的文件,即如果规范与生成的文件匹配,您可以运行 php vendor/bin/openapi-models validate

请确保您使用与生成命令相同的配置文件。

类型

此库不支持来自open-api规范的mixed类型。因此,您必须始终在规范中设置一个类型。

日期或DateTime

以下模式具有日期/日期时间属性。

components:
  schemas:
    Test1:
      type: object
      required:
        - date
      properties:
        date:
          type: string
          format: date
        dateTime:
          type: string
          format: date-time

默认情况下,将字段生成为string类型,因为这将不会要求类进行序列化的任何逻辑。

您可以将配置dateTimeAsObject更改为true,然后这些字段将是DateTimeInterface类型。

为这些类添加了序列化函数,以支持本机json_encode。如果您不使用本机json_encode,您可能需要提供一个自己的实现以满足open api规范。

date的默认格式是Y-m-ddate-time类型的默认格式是Y-m-d\TH:i:sP(RFC3339),但您可以进行配置。

'dateFormat' => 'Y-m-d',
'dateTimeFormat' => 'Y-m-d H:i:s',

这只是为了方便,如果您不想处理时区或只需要不同的格式。