2017-01-21 4 views
0

が、私はそこの例で人物オブジェクトを取得しようとしています!:https://github.com/webonyx/graphql-php/tree/master/examples/01-blogPHP graphQl「フィールド」人ののid 「引数 『』タイプの 『ID 』提供が必要ですがされていない。」、

これをどのようにデバッグすればよいですか?

IndexController.php

public function indexAction() 
    { 
     if (!empty($_GET['debug'])) { 
      // Enable additional validation of type configs 
      // (disabled by default because it is costly) 
      Config::enableValidation(); 
      // Catch custom errors (to report them in query results if debugging is enabled) 
      $phpErrors = []; 
      set_error_handler(function($severity, $message, $file, $line) use (&$phpErrors) { 
       $phpErrors[] = new ErrorException($message, 0, $severity, $file, $line); 
      }); 
     } 
     try { 
      /* // Initialize our fake data source 
      DataSource::init();*/ 
      // Prepare context that will be available in all field resolvers (as 3rd argument): 
      $appContext = new AppContext(); 

      // here we can change to repository which returns user object 
      //$appContext->viewer = DataSource::findUser('1'); // simulated "currently logged-in user" 
      $appContext->rootUrl = 'http://localhost:8080'; 
      $appContext->request = $_REQUEST; 
      // Parse incoming query and variables 
      if (isset($_SERVER['CONTENT_TYPE']) && strpos($_SERVER['CONTENT_TYPE'], 'application/json') !== false) { 
       $raw = file_get_contents('php://input') ?: ''; 
       $data = json_decode($raw, true); 
      } else { 
       $data = $_REQUEST; 
      } 
      $data += ['query' => null, 'variables' => null]; 
      if (null === $data['query']) { 
       $data['query'] = '{hello}'; 
      } 
      // GraphQL schema to be passed to query executor: 
      $schema = new Schema([ 
       'query' => Types::query() 
      ]); 
      $result = GraphQL::execute(
       $schema, 
       $data['query'], 
       null, 
       $appContext, 
       (array) $data['variables'] 
      ); 
      // Add reported PHP errors to result (if any) 
      if (!empty($_GET['debug']) && !empty($phpErrors)) { 
       $result['extensions']['phpErrors'] = array_map(
        ['GraphQL\Error\FormattedError', 'createFromPHPError'], 
        $phpErrors 
       ); 
      } 
      $httpStatus = 200; 
     } catch (\Exception $error) { 
      $httpStatus = 500; 
      if (!empty($_GET['debug'])) { 
       $result['extensions']['exception'] = FormattedError::createFromException($error); 
      } else { 
       $result['errors'] = [FormattedError::create('Unexpected Error')]; 
      } 
     } 
     header('Content-Type: application/json', true, $httpStatus); 
     echo json_encode($result); 
     die; 
    } 

PersonType.php

namespace Application\GraphQL\Type; 

use Application\GraphQL\Types; 
use GraphQL\Type\Definition\ObjectType; 
use GraphQL\Type\Definition\ResolveInfo; 

class PersonType extends ObjectType 
{ 
    public function __construct() 
    { 
     $config = [ 
      'name' => 'Person', 
      'description' => 'Persons', 
      'fields' => function() { 
       return [ 
        'id' => Types::id(), 
        'firstName' => [ 
         'type' => Types::string(), 
        ], 
       ]; 
      }, 
      // todo what is this 
      'interfaces' => [ 

       Types::node() 
      ], 
      'resolveField' => function($value, $args, $context, ResolveInfo $info) { 
       if (method_exists($this, $info->fieldName)) { 
        return $this->{$info->fieldName}($value, $args, $context, $info); 
       } else { 
        return $value->{$info->fieldName}; 
       } 
      } 
     ]; 
     parent::__construct($config); 
    } 

} 

クエリのタイプ:

namespace Application\GraphQL\Type; 


use Application\GraphQL\Types; 
use GraphQL\Type\Definition\ObjectType; 
use GraphQL\Type\Definition\ResolveInfo; 
use GraphQL\Type\Definition\Type; 

class QueryType extends ObjectType 
{ 
    public function __construct() 
    { 
     $config = [ 
      'name' => 'Query', 
      'fields' => [ 
       'person' => [ 
        'type' => Types::person(), 
        'description' => 'Returns person by id', 
        'args' => [ 
         'id' => Types::nonNull(Types::id()) 
        ] 
       ], 
       'hello' => Type::string() 
      ], 
      'resolveField' => function($val, $args, $context, ResolveInfo $info) { 
       return $this->{$info->fieldName}($val, $args, $context, $info); 
      } 
     ]; 
     parent::__construct($config); 
    } 

    public function person($rootValue, $args) 
    { 
     // todo ? 
    } 

    public function hello() 
    { 
     return 'Your graphql-php endpoint is ready! Use GraphiQL to browse API aaa'; 
    } 
} 

私は、クエリを送信しています:

{ 
    person { 
    id 
    } 
} 

なぜそのエラーが発生していますか?

答えて

1

私はエラーを取得した理由として、多くの場合、私は自分自身を発見し、質問を書いてコードを最小化しようとしている間:

'args' => [ 
       'id' => Types::nonNull(Types::id()) 
      ] 
:それはQueryType.phpの__construct()関数内でbecuaseさ

行があります

コードではidが渡される必要がありますが、渡すことはありません。クエリは次のようになります:

{ 
    person(id: "1") { 
    id 

    } 
} 
関連する問題