epalshin / object-to-graphql

使用webonyx/graphql-php生成GraphQL类型的实用助手

1.0.0 2021-06-04 06:08 UTC

This package is auto-updated.

Last update: 2024-09-04 20:06:08 UTC


README

我注意到在我的代码中(我使用Lighthouse PHP来实现GraphQL API),经常首先在模式中描述输入类型,然后描述该类型的对象(DTO)。这造成了重复的感觉,并使得类型系统维护更加困难,所以我决定添加通过代码中的类型声明来程序化生成模式类型的特性。因此,在我的项目中,我扩展了这个建议的第三种情况:自定义解析器的DTO。

安装

您可以通过composer安装此包

composer require epalshin/object-to-graphql

用法

use GraphQL\Type\Definition\ObjectType;
use Palshin\ObjectToGraphQL\ObjectToGraphQL;
use Palshin\ObjectToGraphQL\Attributes\GraphQLArrayType;
use Palshin\ObjectToGraphQL\Attributes\GraphQLObjectType;

#[GraphQLObjectType(typeCategory: ObjectToGraphQL::TYPE_CATEGORY_INPUT)]
class ProductCreateDTO
{
  public string $name;

  public string $description;

  public float $price;
  
  public bool $isPublic;

  #[GraphQLArrayType(ObjectToGraphQL::STRING, allowsNull: false)]
  public array $photoUrls;

  public ?ProductCategoryCreateDTO $category;
}

class ProductCategoryCreateDTO
{
  public string $name;
  
  public string $description;
  
  public int $sortOrder;
}
$objectToGraphQL = new ObjectToGraphQL();
[ $productCreateDto, $productCategoryCreateDto ] = $objectToGraphQL->getObjectTypes(ProductCreateDTO::class);

// and now you can register $objectType in your schema
$mutationType = new ObjectType([
  'name' => 'Mutation',
  'fields' => [
    'productCreate' => [
      'type' => $product,
      'args' => [
        'input' => $productCreateDto,
      ],
      'resolve' => function($rootValue, $args) {
        // TODO
      }
    ]
  ]
]);

生成的GraphQL模式将是

input ProductCreateDTOInput {
  name: String!
  description: String!
  price: Float!
  isPublic: Boolean!
  photoUrls: [String!]!
  category: ProductCategoryCreateDTOInput
}
input ProductCategoryCreateDTOInput {
  name: String!
  description: String!
  sortOrder: Int!
}

测试

composer test

变更日志

请参阅变更日志以了解最近的变化信息。

贡献

请参阅贡献指南以获取详细信息。

安全漏洞

请审查我们的安全策略以了解如何报告安全漏洞。

鸣谢

待办事项

  • 添加类型到模式中的循环添加功能
  • 添加对联合类型的处理
  • 添加对类型类别和后缀参数通过属性传递的处理
  • 添加严格模式以进行早期错误检测
  • 添加自定义异常
  • 编写更多测试
  • 添加为生成的类型添加描述的功能

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。