petecoop / laravel-actions-lighthouse
v2.0.0
2023-02-22 10:50 UTC
Requires
- illuminate/contracts: ^8.15|^9.0|^10.0
- lorisleiva/laravel-actions: ^2.0
- nuwave/lighthouse: ^5.7
README
使用 Laravel Actions 创建由 Lighthouse 解决的动作,允许 GraphQL 查询/变异直接触动作业。
安装
composer require petecoop/laravel-actions-lighthouse
GraphQL 动作
将 AsGraphQL 特性添加到您的动作
use Petecoop\LaravelActionsLighthouse\AsGraphQL; class SomeAction { use AsAction, AsGraphQL; }
这是基于 schema.graphql 中的查询名称解析的
type Query { someAction: SomeResult }
确保您在 config/lighthouse.php 中注册处理器的路径,这可能需要先发布:php artisan vendor:publish --tag=lighthouse-config
如果您添加变异,则将其添加到变异中 - 这需要为每个动作文件夹执行
[
'namespaces' => [
'queries' => [
'App\\GraphQL\\Queries',
'App\\Actions',
'App\\Actions\\User',
],
]
]
然后您可以直接在处理器中使用 GraphQL 的参数
type Mutation { updateUserName(id: ID!, name: String!): User! }
参数作为命名参数传递给 handle 方法
class UpdateUserName { use AsAction, AsGraphQL; public function handle(string $id, string $name) { //... } }
或者使用 asGraphQL 从 GraphQL 查询中提取参数,如果您希望对参数有更多控制,这很有用
class SomeAction { use AsAction, AsGraphQL; public function handle(int $userId, string $name) { //... } public function asGraphQL($_, $args) { return $this->handle($args['id'], $args['name']); } }
验证
您可以使用 Laravel Action 验证规则,使用 @actionValidator 指令。
将 "Petecoop\\LaravelActionsLighthouse" 添加到您的 config/lighthouse.php
"directives" => ["App\\GraphQL\\Directives", "Petecoop\\LaravelActionsLighthouse"],
例如
type Mutation { updateUserName(id: ID!, name: String!): User! @actionValidator }
rules()、getValidationMessages() 和 getValidationAttributes() 目前都有效。
class UpdateUserName { use AsAction, AsGraphQL; public function handle(string $id, string $name) { //... } public function rules(): array { return [ 'name' => ['required', 'min:3'], ]; } }