New

Just launched: Vueblocks, a brand-new search engine for Vue packages! Explore Vueblocks →

petecoop/laravel-actions-lighthouse

Use Laravel Actions as Lighthouse GraphQL resolvers.
2,356 3
Install
composer require petecoop/laravel-actions-lighthouse
Latest Version:v3.0.0
PHP:^8.2
Laravel:11 · 12 · 13
Older releases:8 · 9 · 10
License:MIT
Last Updated:Jul 23, 2026
Links: GitHub  ·  Packagist
Maintainer: petecoop

Laravel Actions Lighthouse

Create Actions with Laravel Actions that are resolved by Lighthouse allowing a GraphQL query/mutation to hit an action directly.

Install

composer require petecoop/laravel-actions-lighthouse

GraphQL Actions

Add the AsGraphQL trait to your action:

use Petecoop\LaravelActionsLighthouse\AsGraphQL;

class SomeAction
{
    use AsAction, AsGraphQL;
}

This is resolved based on name of the query in your schema.graphql:

type Query {
    someAction: SomeResult
}

Ensure you register the path to the handler in config/lighthouse.php this may need to be published first: php artisan vendor:publish --tag=lighthouse-config

If adding a mutation then add to mutations - this needs to be done for each folder of actions

[
    'namespaces' => [
        'queries' => [
            'App\\GraphQL\\Queries',
            'App\\Actions',
            'App\\Actions\\User',
        ],
    ]
]

You can then use the args from GraphQL directly in your handler:

type Mutation {
    updateUserName(id: ID!, name: String!): User!
}

The arguments are passed in as named arguments to the handle method:

class UpdateUserName
{
    use AsAction, AsGraphQL;

    public function handle(string $id, string $name)
    {
        //...
    }
}

Or use asGraphQL to pull out args from the graphql query, useful if you want to have more control over the args:

class SomeAction
{
    use AsAction, AsGraphQL;

    public function handle(int $userId, string $name)
    {
        //...
    }

    public function asGraphQL($_, $args)
    {
        return $this->handle($args['id'], $args['name']);
    }
}

Validation

You can use Laravel Action Validation Rules by using the @actionValidator directive.

The package registers its directive namespace automatically. If you disable package discovery, register Petecoop\\LaravelActionsLighthouse\\ActionServiceProvider manually.

for example:

type Mutation {
    updateUserName(id: ID!, name: String!): User! @actionValidator
}

rules(), getValidationMessages() and getValidationAttributes() currently work.

class UpdateUserName
{
    use AsAction, AsGraphQL;

    public function handle(string $id, string $name)
    {
        //...
    }

    public function rules(): array
    {
        return [
            'name' => ['required', 'min:3'],
        ];
    }
}

Related Packages

doctrine/dbal

Powerful PHP database abstraction layer (DBAL) with many features for database s...

648,266,899 9,701
laravel/framework

The Laravel Framework.

604,216,237 34,982
laravel/tinker

Powerful REPL for the Laravel framework.

512,508,631 7,443
laravel/serializable-closure

Laravel Serializable Closure provides an easy and secure way to serialize closur...

429,221,767 607
nunomaduro/collision

Cli error handling for console/command-line PHP applications.

403,217,078 4,664

Version History

Version Released PHP Laravel License
v3.0.0 ^8.2 ^11.0|^12.0|^13.0 MIT
v2.0.0 ^8.15|^9.0|^10.0 MIT
v1.2.0 ^8.15|^9.0 MIT
v1.1.0 ^8.15 MIT
v1.0.0 ^8.15 MIT