petecoop/laravel-actions-lighthouse
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
Powerful PHP database abstraction layer (DBAL) with many features for database s...
Laravel Serializable Closure provides an easy and secure way to serialize closur...
Cli error handling for console/command-line PHP applications.
Version History
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| v3.0.0 | ^8.2 | ^11.0| | MIT | |
| v2.0.0 | ^8.15| | MIT | ||
| v1.2.0 | ^8.15| | MIT | ||
| v1.1.0 | ^8.15 | MIT | ||
| v1.0.0 | ^8.15 | MIT |