如何在lighthouse graphql laravel中获取自定义指令参数?

我的问题是关于自定义指令https:/lighthouse-php.com4.11the-basicsdirectives.html#定义。

我的模式是

type Query {
  sayFriendly: String @append(text: ", please.")
}

在lighthouse.php的配置中,我已经有了… …

'namespaces' => [
        'models' => ['App', 'App\\Models'],
        'queries' => 'App\\GraphQL\\Queries',
        'mutations' => 'App\\GraphQL\\Mutations',
        'subscriptions' => 'App\\GraphQL\\Subscriptions',
        'interfaces' => 'App\\GraphQL\\Interfaces',
        'unions' => 'App\\GraphQL\\Unions',
        'scalars' => 'App\\GraphQL\\Scalars',
        'directives' => ['App\\GraphQL\\Directives'],
    ],

指令启用。

我在\App/GraphQL/Directives/appendDirective处定义了指令为

<?php

namespace App\GraphQL\Directives;

use Closure;
use GraphQL\Type\Definition\ResolveInfo;
use Nuwave\Lighthouse\Schema\Values\FieldValue;
use Nuwave\Lighthouse\Support\Contracts\Directive;
use Nuwave\Lighthouse\Support\Contracts\FieldMiddleware;
use Nuwave\Lighthouse\Support\Contracts\GraphQLContext;

class appendDirective implements Directive, FieldMiddleware
{
    /**
     * Name of the directive as used in the schema.
     *
     * @return string
     */
    public function name(): string
    {
        return 'append';
    }

    /**
     * Wrap around the final field resolver.
     *
     * @param \Nuwave\Lighthouse\Schema\Values\FieldValue $fieldValue
     * @param \Closure $next
     * @return \Nuwave\Lighthouse\Schema\Values\FieldValue
     */
    public function handleField(FieldValue $fieldValue, Closure $next): FieldValue
    {

        // Retrieve the existing resolver function
        /** @var Closure $previousResolver */
        $previousResolver = $fieldValue->getResolver();

        // Wrap around the resolver
        $wrappedResolver = function ($root, array $args, GraphQLContext $context, ResolveInfo $info) use ($previousResolver): string {
            // Call the resolver, passing along the resolver arguments
            /** @var string $result */
            $result = $previousResolver($root, $args, $context, $info);
            return ($result);
        };

        // Place the wrapped resolver back upon the FieldValue
        // It is not resolved right now - we just prepare it
        $fieldValue->setResolver($wrappedResolver);

        // Keep the middleware chain going
        return $next($fieldValue);
    }

}

我怎样才能从我的指令中得到键 “text “的值,并追加到$result [ @append(text:”, please.”)].$args是一个空数组(应该是,因为我做了参数化的查询[sayFriendly])。

解决方案:

如果你把你的指令从 Nuwave\Lighthouse\Schema\Directives\BaseDirective 您可以获得 $this->directiveArgValue('text'); 来检索自定义指令的文本参数。

这个 $args 是空的,因为那是客户端在查询中提供的参数,在 sayFriendly 查询的例子中不可能有args,所以总是空的。

小贴士:你可以通过查看一个叫做 已执行的指令 在Lighthouse内部,关于自定义指令的文档有点少,但通过查看Lighthouse提供的指令,你可以学到很多东西。

给TA打赏
共{{data.count}}人
人已打赏
解决方案

如何在Ksh中把clear绑定到^L上?

2022-4-20 16:09:07

解决方案

Haskell一直给我类型错误

2022-4-20 16:09:09

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索