GraphQL Lighthouse 中枚举的默认空值

问题描述 投票:0回答:1

在 Lighthouse 中我有一个像这样的枚举

<?php

use GraphQL\Type\Definition\Description;

#[Description(description: 'Size')]

enum Size: string
{
    case M = 'm';
    case L = 'l';
}

在服务提供商中我这样注册:

    $typeRegistry->register(new PhpEnumType(StringSize::class));

在某些输入中我想像这样使用它:

input SomeInput {
    mySize: Size = null
    someOtherArgment: String = null
}

但是用这个输入进行突变会给我这个错误:

"message": "Undefined property: GraphQL\\Language\\AST\\NullValueNode::$value",
"exception": "ErrorException",
"file": "/var/www/html/vendor/nuwave/lighthouse/src/Schema/AST/ASTHelper.php",
"line": 166,

由于某种原因,我无法将

null
设置为任何枚举值的默认值。 如果我省略默认的 null 并仅发送 null 作为值,则一切正常,因此枚举为
null
的事实不是问题,默认的
null
才是问题。

我调整了 Nuwave\Lighthouse\Schema\AST\ASTHelper.php,现在它看起来像这样:

// if ($argumentType instanceof EnumType) {
if ($argumentType instanceof EnumType && !($defaultValue instanceof NullValueNode)) {
    assert($defaultValue instanceof EnumValueNode);

    $internalValue = $argumentType->getValue($defaultValue->value);
    assert($internalValue instanceof EnumValueDefinition);

    return $internalValue->value;
}

这个简单的调整效果非常好,我现在可以将

null
设置为默认值,没有任何问题,但由于这需要我更改 Lighthouse 源代码,所以我想找到一个更好的替代方案。

有没有办法在不更改源代码的情况下将枚举的默认值设置为

null
,或者这只是 Lighthouse 中的一个错误?

enums graphql gql laravel-lighthouse
1个回答
0
投票

在尝试了多种使用解析器和指令来规避该问题的可能性之后,我发现它们都不是简单的解决方案。

相反,我最终使用以下方法复制并覆盖 ASTHelper.php: 覆盖使用 Composer 安装的库中的类的策略

目前效果很好。只需要小心未来的任何 Lighthouse 更新

© www.soinside.com 2019 - 2024. All rights reserved.