kronostechnologies / graphql-generator
基于Webonyx库的GraphQL类生成器
Requires
- psr/log: ^1.0
- symfony/console: ^2.2
- webonyx/graphql-php: ^0.11
Requires (Dev)
- phpunit/phpunit: ^5.7
This package is auto-updated.
Last update: 2022-06-10 23:26:51 UTC
README
将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.stub与TypeStore匹配,dto.stub与DTO匹配,resolver.stub与解析器匹配。
有关占位符文件内容,请参阅src/Generator/Writer/Namespaced/stubs。
变异
在生成GraphQL文件时,当前会忽略变异。因为这些大多意味着逻辑操作,您需要自行实现解析函数。