d3mo17/colja

为 symfony 项目提供 GraphQL 功能

维护者

详细信息

github.com/d3mo17/colja

源代码

问题

安装: 4

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

类型:symfony-bundle

0.10.0 2022-04-24 21:23 UTC

This package is auto-updated.

Last update: 2024-09-25 01:28:52 UTC


README

一个提供 GraphQL 功能的 Symfony 扩展包(通过使用 Siler)。默认情况下,GraphQL 请求(方法 POST)将在请求-uri /graphql 上处理。


 

模式

必须定义一个基本的模式文件,该文件使用 GraphQL 模式定义语言(SDL)。此文件的路径必须在 d_mo_colja.yaml 文件中配置(请参阅 此处)。

基本模式文件可以通过多个更多文件进行扩展(请参阅 此处)。

要将模式中的查询或突变(字段)链接到 PHP 中的可调用的解析器,您必须 配置一个类名和一个方法,使用指定的字段名


 

解析器

包含字段解析器的类必须扩展类 DMo\Colja\GraphQL\AbstractResolver。这是因为 ResolverManager 将注入到每个解析器中,因此您可以通过这种方式获取 symfony 控制器和容器。

所有解析器(可调用函数)都可以定义为期望四个参数

  • $root
  • $args
  • $context
  • $info

最重要的参数是第二个参数: $args。它包含传递给字段的全部参数。

每个解析器都可以返回一个标量值或关联数组。数组值可以包含标量或函数引用,这些函数引用可以作为自身执行的字段解析器。

所有需要“延迟加载”的字段值都必须定义为解析器,因为解析器只有在查询中请求了相应的字段时才会调用。您也可以使用此技术实现递归数据结构(请参阅 示例)。


 

GET 请求

默认情况下,此扩展包仅支持 POST 请求方法。但您可以轻松添加对 GET 方法的支持。只需将以下内容放在您 symfony 项目的 routes.yaml

d_mo_colja_endpoint_get:
    path:       /graphql
    controller: DMo\Colja\Controller\GraphQLController::endpoint
    methods:    GET


 

设置示例

有关更多信息,请参阅 Colja 示例

a-symfony-project/
├─ bin/
├─ config/
│  ├─ graphql/
│  │  ├─ base.schema
│  ├─ packages/
│  │  ├─ .../
│  │  ├─ d_mo_colja.yaml
│  │  ├─ ...
|  ├─ bundles.php
│  ├─ .../
├─ src/
│  ├─ Controller/
│  ├─ .../
│  ├─ GraphQL/
│  │  ├─ DemoResolver.php
│  │  ├─ ...
├─ ...
├─ composer.json

base.schema

type Query {
    demo: String,
    demoArgs(name: String!, num: Int): String
}

d_mo_colja.yaml

d_mo_colja:
  schema: config/graphql/base.schema
  query:
    demo:
      class: App\GraphQL\DemoResolver
      method: demo
    demoArgs:
      class: App\GraphQL\DemoResolver
      method: demoWithArguments

bundles.php

<?php

return [
    Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
    // ...
    DMo\Colja\DMoColjaBundle::class => ['all' => true],
];

DemoResolver.php

<?php

namespace App\GraphQL;

use DMo\Colja\GraphQL\AbstractResolver;

class DemoResolver extends AbstractResolver
{
    public function demo(array $root = null, array $args): string
    {
        return "Hello World!";
    }

    public function demoWithArguments(array $root = null, array $args): string
    {
        $num = array_key_exists('num', $args) ? $args['num'] : 17;
        return "Hello ${args['name']}. The magic number is $num!";
    }
}


 

许可

MIT 许可证(MIT)

版权所有 © 2021 Daniel Moritz

特此授予任何人获得此软件及其相关文档副本(“软件”)的副本(“软件”),免费处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售该软件副本的权利,并允许向获得该软件的人提供此软件,但受以下条件约束

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,包括但不限于适销性、适用于特定目的和不侵犯知识产权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是由合同行为、侵权或其他因软件或软件的使用或其他方式引起的。