# Extending Lighthouse
Lighthouse offers various extension points which can be utilized by package developers as well as end users.
# The Event System
Lighthouse offers a unified way of hooking into the complete execution lifecycle through Laravel's event system. You may use any Service Provider to register listeners.
You can find a complete list of all dispatched events in the events API reference.
# Adding Directives
You can add your custom directives to Lighthouse by listening for the
RegisterDirectiveNamespaces
event.
Check out the test suite for an example of how this works.
# Changing the default resolver
The first priority when looking for a resolver is always given to FieldResolver
directives.
After that, Lighthouse attempts to find a default resolver.
The interface \Nuwave\Lighthouse\Support\Contracts\ProvidesResolver
is expected to provide a resolver in case no resolver directive is defined for a field.
If the field is defined on the root Query
or Mutation
types,
Lighthouse's default implementation looks for a class with the capitalized name
of the field in the configured default location.
Non-root fields fall back to webonyx's default resolver.
You may overwrite this by passing a callable
to \GraphQL\Executor\Executor::setDefaultFieldResolver
.
When the field is defined on the root Subscription
type, the \Nuwave\Lighthouse\Support\Contracts\ProvidesSubscriptionResolver
interface is used instead.