架构
架构将字段订阅到类型

将字段订阅到类型

Gato GraphQL 使用发布-订阅模式将字段「订阅」到类型。在该模式中,FieldResolver 实体将字段添加到某个 TypeResolver 实体。

在此示例中,类 UserFieldResolver 将字段 usernameemailurl 添加到类 UserTypeResolver,而 UserTypeResolver 负责解析类型 User

class UserFieldResolver extends AbstractDBDataFieldResolver
{
  public static function getClassesToAttachTo(): array
  {
    return [UserTypeResolver::class];
  }
 
  public static function getFieldNamesToResolve(): array
  {
    return [
      'username',
      'email',
      'url',
    ];
  }

User 类型事先并不知道它将满足哪些字段,usernameemailurl 等字段是由 field resolver 注入到该类型中的。

通过这种方式,GraphQL schema 变得易于扩展:只需添加一个 field resolver,任何扩展都可以向现有类型添加新字段(例如添加字段 User.shippingAddress),或者覆盖字段的解析方式(例如重新定义 User.url 以返回用户的网站地址)。