mathsgod/graphql-php-loader

用于 webonyx graphql 的 PHP 加载器

1.0.0 2021-03-11 03:21 UTC

This package is auto-updated.

Last update: 2024-09-25 17:11:41 UTC


README

PHP Composer

graphql-php-loader

用于生成 webonyx/graphql-php Schema 的简单加载器

用法

使用文件结构创建和设计 GraphQL 模式。

  1. 在您的文档根目录下创建一个名为 "graphql" 的文件夹。
  2. 在 "graphql" 文件夹中创建一个名为 "Query" 的文件夹。
  3. 现在您可以创建 Query 的字段

初始化

use GraphQL\Loader;
use GraphQL\Type\Schema;

$loader=new Loader();

$config = SchemaConfig::create()
    ->setQuery($loader->queryType())
    ->setMutation($loader->mutationType());

$schema = new Schema($config);

示例

简单查询

在 "graphql/Query" 文件夹中创建一个名为 hello.php 的文件

graphql
+-- Query
|  +-- hello.php

Query/hello.php

return [
    "type"=>"String",
    "resolve"=>function($root,$args,$context){
        return "world!";
    }
];

这等价于构建以下模式

type Query{
    hello:String
}

自定义类型

如果您想使用自定义对象类型,只需在 graphql 文件夹中创建类型文件

graphql
+-- Query
|  +-- me.php
+-- User.php

Query/me.php

return [
    "type"=>"User",
    "resolve"=>function($root,$args,$context){
        return $context->me; //return object
    }
];

User.php

return [
    "fields"=>[
        "first_name"=>"String",
        "last_name"=>"String"
    ]
];

这等价于构建以下模式

type Query{
    me:User
}

type User{
    first_name:String
    last_name:String
}

自定义类型的字段

如果您想为自定义对象类型创建自定义字段,只需为自定义对象创建文件夹

示例

User 有多个电话号码

graphql/User.php

return [
    "fields"=>[
        "first_name"=>"String",
        "last_name"=>"String"
    ]
];
/* 
no need create phone in fields,
by create file phone.php in User folder, it auto generate fields in User type
*/

在 "User" 文件夹中创建 phone.php

graphql/User/phone.php

return [
    "type"=>"[String]",
    "resolve"=>function($user,$args,$context){
        return $user->getPhones(); //return multi phone
    }
];
graphql
+-- Query
|  +-- me.php
+-- User
|  +-- phone.php
+-- User.php

这等价于构建以下模式

type Query{
    me:User
}

type User{
    first_name:String
    last_name:String
    phone:[String]
}

子文件夹结构

graphql
+-- Query
|  +-- User
|      +-- list.php
|  +-- Invoice
|      +-- list.php
+-- User.php
+-- Invoice.php

现在您可以通过以下方式进行查询

query{
    User{
        list{
            first_name
            last_name
        }
    }
    Invoice{
        list{
            invoice_no
        }
    }
}