compwright/graphql-php-jetpack

使用 https://github.com/webonyx/graphql-php 轻松启用对自定义标量和支持指令的支持

v2.2.1 2024-02-22 14:03 UTC

README

使用 Jetpack 标量和指令支持解锁新的 graphql-php 超能力

Validate GitHub license Packagist Packagist

特性

  • 使用自定义标量改进你的 GraphQL 模式验证
  • 使用指令后处理解析的字段值

安装

$ composer require compwright/graphql-php-jetpack

使用

在模式构建时安装 Jetpack 模式支持

use Compwright\GraphqlPhpJetpack\JetpackDecorator;
use GraphQL\Utils\BuildSchema;

$schemaTypeDecorator = new JetpackDecorator();
$schema = BuildSchema::build($ast, $schemaTypeDecorator);

在服务器配置构建时安装 Jetpack 指令支持

use Compwright\GraphqlPhpJetpack\DirectiveResolver;
use GraphQL\Server\ServerConfig;
use GraphQL\Type\Definition\ResolveInfo;

$resolver = function ($root, array $args, $context, ResolveInfo $info) {
    // resolve field value
    return $root;
};

$serverConfig = ServerConfig::create()
    ->setFieldResolver(new DirectiveResolver($resolver));

在您的模式中声明您希望使用的指令和标量,并在需要的位置调用它们

directive @uppercase on FIELD_DEFINITION

scalar Email

type User {
    email: Email! @uppercase
}

type Query {
    user: User!
}

Jetpack 标量

您可以在模式定义中像使用任何其他类型一样使用提供的标量。

scalar BigInt

表示大整数的任意长数字序列。

scalar Date

格式为 Y-m-d 的日期字符串,例如 2011-05-23

以下转换适用于所有日期标量

  • 输出值可以是有效的日期字符串或 \DateTimeInterface 实例。
  • 输入值必须始终是有效的日期字符串,并将转换为 \DateTimeImmutable 实例。

scalar DateTime

格式为 Y-m-d H:i:s 的日期时间字符串,例如 2018-05-23 13:43:32

scalar DateTimeTz

格式为 Y-m-d\TH:i:s.uP 的日期时间字符串,例如 2020-04-20T16:20:04+04:002020-04-20T16:20:04Z

scalar Email

符合 RFC 5321 的电子邮件。

scalar JSON

以 JavaScript 对象表示法编码的任意数据。请参阅 https://www.json.org

这期望一个 JSON 格式的字符串,而不是 GraphQL 字面量。

type Query {
  foo(bar: JSON!): JSON!
}

# Wrong, the given value is a GraphQL literal object
{
  foo(bar: { baz: 2 })
}

# Correct, the given value is a JSON string representing an object
{
  foo(bar: "{ \"bar\": 2 }")
}

JSON 响应将包含嵌套的 JSON 字符串。

{
  "data": {
    "foo": "{ \"bar\": 2 }"
  }
}

scalar Latitude

介于 -90 和 90 度之间的任何数字。

scalar Longitude

介于 -180 和 180 度之间的任何数字。

scalar Mixed

允许任何值的宽松类型。在传递大型 IntFloat 文字时请谨慎,因为它们可能在服务器端无法正确解析。如果您正在处理非常大的数字,请使用 String 文字以确保安全。

scalar Null

始终为 null。严格验证值非空,不进行强制转换。

scalar UsState

任何有效的两位美国州缩写。

scalar UsZipCode

五位数字,可选地后跟破折号和另外四位数字。

Jetpack 指令

directive @callback(fn: String!) on FIELD_DEFINITION

在解析的值上执行函数

directive @lowercase on FIELD_DEFINITION

将解析的文本转换为小写

directive @uppercase on FIELD_DEFINITION

将解析的文本转换为大写

许可证

MIT 许可证