men*_*ndo 2 php laravel graphql laravel-lighthouse
您好,我正在尝试创建一个返回 JSON 的解析器,我将此库与自定义标量一起使用https://github.com/mll-lab/graphql-php-scalars
我使用 JSON 标量,如下所示:
schema.graphql:
input CustomInput {
field1: String!
field2: String!
}
type Mutation {
getJson(data: CustomInput): JSON @field(resolver: "App\\GraphQL\\Mutations\\TestResolver@index")
}
Run Code Online (Sandbox Code Playgroud)
测试解析器.php
public function index($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo)
{
$data = array('msg'=>'hellow world', 'trueorfalse'=>true);
return \Safe\json_encode($data);
}
Run Code Online (Sandbox Code Playgroud)
GraphQL 游乐场
mutation{
getJson(data: { field1: "foo", field2: "bar" })
}
------------ response------------
{
"data": {
"getJson": "\"{\\\"msg\\\":\\\"hello world\\\",\\\"trueorfalse\\\":true}\""
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它返回一个字符串,而不是 JSON...我做错了什么?
您必须知道您希望收到什么回应。在解析器中,您必须返回一个数组,因此在您的示例中只需返回一个数组return $data。
那么问题来了,你期望什么...
mll-lab/grpahql-php-scalars对您来说还有一个小改进:查询和突变不需要@field指令。如果您将字段的 CamelCased 名称放置在特定名称空间中(App\GraphQL\Queries对于查询字段和App\GraphQL\Mutations突变字段。这些是默认值,您可以在配置中更改它们),Lighthouse 可以自动为您找到解析器。查看文档:https://lighthouse-php.com/master/the-basics/fields.html#hello-world
所以对于你的例子你可以简单地写
type Mutation {
getJson(data: CustomInput): JSON
}
Run Code Online (Sandbox Code Playgroud)
type Mutation {
getJson(data: CustomInput): JSON
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5414 次 |
| 最近记录: |