Architektur
ArchitekturFelder an Typen abonnieren

Felder an Typen abonnieren

Gato GraphQL verwendet das Publish-Subscribe-Muster, damit Felder Typen „abonnieren" – dabei fügt eine FieldResolver-Entität Felder zu einer TypeResolver-Entität hinzu.

In diesem Beispiel fügt die Klasse UserFieldResolver die Felder username, email und url zur Klasse UserTypeResolver hinzu, die den Typ User auflöst:

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

Der Typ User weiß im Voraus nicht, welche Felder er bedienen wird – diese (username, email und url) werden stattdessen vom Field Resolver in den Typ injiziert.

Auf diese Weise wird das GraphQL-Schema leicht erweiterbar: Durch das einfache Hinzufügen eines Field Resolvers kann jede Erweiterung neue Felder zu einem bestehenden Typ hinzufügen (z. B. das Feld User.shippingAddress) oder die Art und Weise, wie ein Feld aufgelöst wird, überschreiben (z. B. User.url neu definieren, um stattdessen die Website des Benutzers zurückzugeben).