compwright / graphql-php-jetpack
使用 https://github.com/webonyx/graphql-php 轻松启用对自定义标量和支持指令的支持
Requires
- php: ^7.4 || ^8
- ext-json: *
- psr/container: ^1.1 || ^2
- psr/http-message: ^1.1 || ^2.0
- psr/log: ^1.1 || ^2 || ^3
- webonyx/graphql-php: ^15.9
Requires (Dev)
- ergebnis/composer-normalize: ^2.41
- friendsofphp/php-cs-fixer: ^3.48
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.6 || ^10.5
This package is auto-updated.
Last update: 2024-09-22 15:12:52 UTC
README
使用 Jetpack 标量和指令支持解锁新的 graphql-php 超能力
特性
- 使用自定义标量改进你的 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:00
,2020-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
允许任何值的宽松类型。在传递大型 Int
或 Float
文字时请谨慎,因为它们可能在服务器端无法正确解析。如果您正在处理非常大的数字,请使用 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 许可证