d3mo17 / colja
为 symfony 项目提供 GraphQL 功能
Requires
- php: >=7.3
- guzzlehttp/guzzle: ~6.0
- leocavalcante/siler: 1.7.8
- symfony/config: ^3.4|^4.0
- symfony/console: ^3.4|^4.0
- symfony/dependency-injection: ^3.4|^4.0
- symfony/filesystem: ^3.4|^4.0
- symfony/finder: ^3.4|^4.0
- symfony/framework-bundle: ^3.4|^4.0
- symfony/http-kernel: ^3.4|^4.0
- webonyx/graphql-php: ^14.0
Requires (Dev)
- symfony/phpunit-bridge: ^3.4|^4.0
- symfony/process: ^3.4|^4.0
- symfony/yaml: ^3.4|^4.0
Suggests
- doctrine/orm: Required to use AbstractEntityResolver, which provides some common methods to interact with a database.
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
特此授予任何人获得此软件及其相关文档副本(“软件”)的副本(“软件”),免费处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售该软件副本的权利,并允许向获得该软件的人提供此软件,但受以下条件约束
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,包括但不限于适销性、适用于特定目的和不侵犯知识产权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是由合同行为、侵权或其他因软件或软件的使用或其他方式引起的。