petecoop/laravel-actions-lighthouse

v2.0.0 2023-02-22 10:50 UTC

This package is auto-updated.

Last update: 2024-08-30 01:14:47 UTC


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