kronostechnologies/graphql-generator

此包已被废弃,不再维护。未建议替代包。

基于Webonyx库的GraphQL类生成器

v0.3.3 2018-06-18 20:49 UTC

README

CircleCI Coverage Status

将GraphQL模式转换为静态PHP文件。它目前支持生成命名空间类文件。该工具通过CLI界面进行交互。

需求

  • PHP 5.6 或更高版本。
  • Composer

安装

可以通过克隆仓库来访问GraphQL生成器。

git clone https://github.com/kronostechnologies/graphql-generator.git
composer install

示例

示例源目录包含一些可以运行工具的graphqls模式示例。

简单模式生成

要从有效的graphqls文件生成类文件,请运行以下命令

php graphqlgen generate-classes ./examples/base.graphqls ./base

输出文件将出现在base目录中。

测试

使用PHPUnit 5.7运行单元测试。

phpunit

使用

可以使用以下命令运行CLI工具

php graphqlgen generate-classes [options] [--] <input> <targetdir>

参数包括

  • 输入:用作输入的.graphqls文件。
  • 目标目录:生成类的目录。

可用选项包括

  • --writer=WRITER:用于输出文件的写入器类型。默认为命名空间。
    • 命名空间写入器:为每个类型定义生成一个类,例如,对于枚举类型,在Types\Enums下,对于输入类型,在Types\Input下,对于接口类型,在Types\Interfaces下,对于标量类型,在Types\Scalars下,对于联合类型,在Types\Unions下,对于标准类型,在Types下。将遵守每个目录的命名空间命名约定。
  • --stubs-dir:这是一个包含占位符文件的目录。
  • --overwrite:如果设置此标志,写入器将尝试覆盖文件。如果没有设置,则在发现现有文件时将抛出警告。
  • --formatter-use-tabs:如果设置此标志,PHP输出文件格式化器将使用制表符而不是空格进行缩进。
  • --formatter-indent-spaces:如果不使用制表符进行格式化,则这是每个缩进块的空格数。默认为4。
  • --formatter-line-merge:当描述在.graphqls文件中跨越多行时,它们将使用指定的字符合并。默认为,

命名空间写入器

尽管命名空间写入器是目前唯一支持的写入器,但它附带了一些内置选项

  • --namespaced-target-namespace:如果使用命名空间写入器,则给定的命名空间将被前缀。这不会更改目标目录结构。

附加文件

除了为每个类型生成类型定义之外,还生成了以下文件。

所有类型都在TypeStore中进行静态初始化。这有助于确保整个应用程序中只有一个类型定义的实例。每个类型的属性独立存储在DTO中。

TypeStore位置

\TypeStore

对于输入类型和联合类型,会创建一个解析器。此文件旨在由该工具的用户进行编辑,并将类型定义与实际代码分离。解析器通过ResolverFactory进行初始化。这允许向解析器的构造函数传递外部值。

解析器命名空间格式

Resolvers\Types\[TypeCategory]\TypeName

此外,对于输入类型,还会创建一个DTO。DTO作为最终应由解析器函数返回的数据结构。将这些问题分离很重要,因为类型定义只能存在一次(因此需要TypeStore),但DTO可以在整个应用程序中存在多个实例。

DTO命名空间格式

DTO\Types\[TypeCategory]\TypeName

接口由于GraphQL能够实现多个接口,因此使用组合而非继承。它们在两个组件中声明:一个特质和一个实现此特质的裸类。特质包含所有成员。

占位符文件

占位符文件用作生成特定GraphQL类型文件的样板。对于命名空间化的Writer,所需的文件与src/Generator/Writer/Namespaced/stubs中的相同。

例如,接口类型将使用interface.stub作为其生成类的基文件。以下类型匹配

  • 枚举:enum.stub
  • 接口:interface.stub
  • 输入:input.stub
  • 对象:object.stub
  • 标量:scalar.stub
  • 联合:union.stub

此外,typestore.stubTypeStore匹配,dto.stub与DTO匹配,resolver.stub与解析器匹配。

有关占位符文件内容,请参阅src/Generator/Writer/Namespaced/stubs

变异

在生成GraphQL文件时,当前会忽略变异。因为这些大多意味着逻辑操作,您需要自行实现解析函数。