Abonner des champs aux types
Gato GraphQL utilise le patron Publish-subscribe pour que les champs soient « abonnés » aux types, dans lequel une entité FieldResolver ajoute des champs à une entité TypeResolver.
Dans cet exemple, la classe UserFieldResolver ajoute les champs username, email et url à la classe UserTypeResolver, qui résout le type User :
class UserFieldResolver extends AbstractDBDataFieldResolver
{
public static function getClassesToAttachTo(): array
{
return [UserTypeResolver::class];
}
public static function getFieldNamesToResolve(): array
{
return [
'username',
'email',
'url',
];
}Le type User ne sait pas à l'avance quels champs il satisfera, mais ceux-ci (username, email et url) sont au contraire injectés dans le type par le field resolver.
De cette façon, le schéma GraphQL devient facilement extensible : en ajoutant simplement un field resolver, n'importe quelle extension peut ajouter de nouveaux champs à un type existant (comme le champ User.shippingAddress), ou redéfinir la façon dont un champ est résolu (comme redéfinir User.url pour retourner le site web de l'utilisateur à la place).