You are here

public function ComposableSchemaExampleExtension::registerResolvers in GraphQL 8.4

Registers type and field resolvers in the shared registry.

Parameters

\Drupal\graphql\GraphQL\ResolverRegistryInterface $registry: The resolver registry.

Overrides SchemaExtensionPluginInterface::registerResolvers

File

examples/graphql_composable/src/Plugin/GraphQL/SchemaExtension/ComposableSchemaExampleExtension.php, line 24

Class

ComposableSchemaExampleExtension
Plugin annotation @SchemaExtension( id = "composable_extension", name = "Composable Example extension", description = "A simple extension that adds node related fields.", schema = "composable" )

Namespace

Drupal\graphql_composable\Plugin\GraphQL\SchemaExtension

Code

public function registerResolvers(ResolverRegistryInterface $registry) : void {
  $builder = new ResolverBuilder();
  $registry
    ->addFieldResolver('Query', 'article', $builder
    ->produce('entity_load')
    ->map('type', $builder
    ->fromValue('node'))
    ->map('bundles', $builder
    ->fromValue([
    'article',
  ]))
    ->map('id', $builder
    ->fromArgument('id')));

  // Create article mutation.
  $registry
    ->addFieldResolver('Mutation', 'createArticle', $builder
    ->produce('create_article')
    ->map('data', $builder
    ->fromArgument('data')));
  $registry
    ->addFieldResolver('ArticleResponse', 'article', $builder
    ->callback(function (ArticleResponse $response) {
    return $response
      ->article();
  }));
  $registry
    ->addFieldResolver('ArticleResponse', 'errors', $builder
    ->callback(function (ArticleResponse $response) {
    return $response
      ->getViolations();
  }));
  $registry
    ->addFieldResolver('Article', 'id', $builder
    ->produce('entity_id')
    ->map('entity', $builder
    ->fromParent()));
  $registry
    ->addFieldResolver('Article', 'title', $builder
    ->compose($builder
    ->produce('entity_label')
    ->map('entity', $builder
    ->fromParent())));
  $registry
    ->addFieldResolver('Article', 'author', $builder
    ->compose($builder
    ->produce('entity_owner')
    ->map('entity', $builder
    ->fromParent()), $builder
    ->produce('entity_label')
    ->map('entity', $builder
    ->fromParent())));

  // Response type resolver.
  $registry
    ->addTypeResolver('Response', [
    __CLASS__,
    'resolveResponse',
  ]);
}