2017-02-22 3 views
0

Ich verwende Version v1.4.2.18. Die Bibliothek kann hier gefunden werden: https://github.com/Youshido/GraphQLPHP Youshido GraphQL Problem mit verschachtelten Feldern

Ich versuche folgendes zu erreichen:

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

Ich habe eine 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'] 
     ]; 
    } 
} 

Dann wird die ArticleSummaryType.php:

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

Dann die ArticleField.php hat die getType-Methode den ArticleType whi zurückgeben ch hat das Feld id.

aber was ich bin immer ein Fehler:

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

Was passiert zu sein scheint, ist, dass, wenn $targetField->getType() auf Linie 135 in src/Execution/Processor.php genannt wird seine die ArticleField Klasse zurückkehrt, nicht die ArticleType Klasse.

Ich würde erwarten, dass die Klasse zurückgegeben wird, wie in der 'getType' -Methode für die ArticleField-Klasse deklariert.

Bin ich das falsch für Schachtelfelder? Oder gibt es einen Fehler in der Bibliothek?

Antwort

0

Um dies zu erreichen, übergeben Sie nur die Klasse Field als erstes Argument.

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

Dann im Feld Klasse können Sie getName überschreiben Sie den Namen für das Feld zu setzen, wie benötigt, oder es wird den Klassennamen als Feldnamen verwenden.

Verwandte Themen