【问题标题】:PHP Youshido GraphQL issue with nested fields嵌套字段的PHP Youshido GraphQL问题
【发布时间】:2017-02-23 04:56:40
【问题描述】:

我使用的是 v1.4.2.18 版本。该库可以在这里找到:https://github.com/Youshido/GraphQL

我正在努力完成以下工作:

query { 
   articleSummary(id:1) {
       title,
       body,
       article {
          id
       }
   }
}

我有一个 ArticleSummaryField.php:

class ArticleSummaryField extends AbstractField
{
    public function build(FieldConfig $config)
    {
        $config->addArgument('id', new NonNullType(new StringType()));
    }

    public function getType()
    {

        return new ArticleSummaryType();
    }

    public function resolve($value, array $args, ResolveInfo $info)
    {
        return [
            'title' => 'test title',
            'body' => 'test body',
            'article' => $args['id']
        ];
    }
}

然后是 ArticleSummaryType.php:

class ArticleSummaryType extends AbstractObjectType
{
    public function build($config)
    {
        $config
            ->addField('title', new StringType());
            ->addField('body', new StringType());
            ->addField('article', new ArticleField());
    }
}

然后 ArticleField.php 有 getType 方法返回具有 id 字段的 ArticleType。

但是我得到的是一个错误:

Fatal error: Uncaught Error: Call to undefined method ArticleField::getNullableType() in .../vendor/youshido/graphql/src/Execution/Processor.php on line 135

似乎正在发生的事情是,当调用 src/Execution/Processor.php 中第 135 行的 $targetField->getType() 时,它返回了 ArticleField 类,而不是 ArticleType 类。

我希望返回在 ArticleField 类的“getType”方法中声明的类。

我在嵌套字段时会犯这个错误吗?还是库有bug?

【问题讨论】:

    标签: php-7 graphql


    【解决方案1】:

    为此,您只需将 Field 类作为第一个参数传递。

    class ArticleSummaryType extends AbstractObjectType
    {
        public function build($config)
        {
            $config
                ->addField('title', new StringType());
                ->addField('body', new StringType());
                ->addField(new ArticleField());
        }
    }
    

    然后在字段类中可以覆盖getName,根据需要设置字段名,否则会使用类名作为字段名。

    【讨论】:

      猜你喜欢
      • 2018-11-04
      • 2018-09-13
      • 2021-07-28
      • 1970-01-01
      • 2019-08-12
      • 2019-07-08
      • 2020-02-25
      • 2020-01-09
      • 1970-01-01
      相关资源
      最近更新 更多