Skip to content

petecoop/laravel-actions-lighthouse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

Add "Petecoop\\LaravelActionsLighthouse" to your config/lighthouse.php:

"directives" => ["App\\GraphQL\\Directives", "Petecoop\\LaravelActionsLighthouse"],

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'],
        ];
    }
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages