How do I resolve extended ScalarTypes? https://webonyx.github.io/graphql-php/type-system/scalar-types/ explains how to create a class for them and the tests show how to ]build a Schema manually with them
|
'd' => ['type' => $ComplexScalarType], |
, but I can't find how to load them with a parser.
Concrete example, trying to parse this GraphQL:
scalar TestScalarType @scalar(class: "ModelariumTests\\TestScalarType")
schema {
query: TestType
}
input TestInputObject {
t: TestScalarType
}
type TestType {
fieldWithObjectInput(input: TestInputObject): String
fieldWithScalarInput(input: TestScalarType): TestScalarType
}
The idea is to use the directive to resolve the class. I'm parsing it like this:
class TestScalarType extends ScalarType { ... }
class MyTest {
public function testObjectParserQuery()
{
$document = Parser::parse(
'query q($input: TestInputObject) {
fieldWithObjectInput(input: $input)
}'
);
$data = file_get_contents('test.graphql'); // loads the schema above
$ast = \GraphQL\Language\Parser::parse($data);
$schemaBuilder = new \GraphQL\Utils\BuildSchema(
$ast,
[__CLASS__, 'extendDatatypes']
);
$schema = $schemaBuilder->buildSchema();
$result = Executor::execute($schema, $document, null, null, ['input' => [ 't' => 'valid']]);
$this->assertEquals([], $result->errors);
$expected = [
'data' => ['fieldWithObjectInput' => '{"t":"xvalid"}'],
];
$this->assertEquals($expected, $result->toArray());
}
extendDatatypes is called for TestType, but I don't see how to load the scalar classes dynamically. Any hints please?
How do I resolve extended ScalarTypes? https://webonyx.github.io/graphql-php/type-system/scalar-types/ explains how to create a class for them and the tests show how to ]build a Schema manually with them
graphql-php/tests/Executor/VariablesTest.php
Line 132 in 1f0ec24
Concrete example, trying to parse this GraphQL:
The idea is to use the directive to resolve the class. I'm parsing it like this:
extendDatatypesis called forTestType, but I don't see how to load the scalar classes dynamically. Any hints please?