Schema Functions
通过 GraphQL 字段和指令公开 PHP 编程语言的功能。

Click to watch tutorial video - 07:54
GraphQL 模式提供了字段和指令,用于公开 PHP 编程语言的功能。
函数字段
函数字段是全局字段,因此会被添加到 GraphQL 模式中的每一个类型:不仅包括 QueryRoot,还包括 Post、User 等。
函数字段在数据检索后对数据进行操作时非常有用,允许我们以任意方式转换字段值,并赋予我们强大的数据导入/导出能力。
例如,虽然我们有 Post.hasComments 字段,但有时我们需要其相反的值。与其创建新的 Post.notHasComments 字段(这需要编辑 PHP 代码),不如使用 Field to Input 功能将 hasComments 的值输入到 not 字段,从而始终在 GraphQL query 内计算新值:
query {
posts {
id
hasComments
notHasComments: _not(value: $__hasComments)
}
}函数指令
GraphQL 模式提供了指令,用于公开编程语言(如 PHP)中常见的功能。
指令字段在数据检索后对数据进行操作时非常有用,允许我们以任意方式转换字段值,并赋予我们强大的数据导入/导出能力。
例如,以下 query:
query {
posts {
title @strUpperCase
}
}...将产生如下响应:
{
"data": {
"posts": [
{
"title": "HELLO WORLD!"
},
{
"title": "LOVELY WEATHER"
}
]
}
}辅助字段
GraphQL 模式中添加了提供常用辅助功能的字段。
辅助字段是全局字段,因此会被添加到 GraphQL 模式中的每一个类型:不仅包括 QueryRoot,还包括 Post、User 等。
在以下 query 中,我们获取网站中用户的 ID,并以其 ID 作为参数执行新的 GraphQL query:
query {
users {
userID: id
url: _urlAddParams(
url: "https://somewebsite/endpoint/user-data",
params: {
userID: $__userID
}
)
headers: _httpRequestHeaders
headerNameValueEntryList: _objectConvertToNameValueEntryList(
object: $__headers
)
_sendHTTPRequest(input: {
url: $__url
options: {
headers: $__headerNameValueEntryList
}
}) {
statusCode
contentType
body
}
}
}环境字段
GraphQL 模式提供了全局字段 _env,允许从环境变量或 PHP 常量(最常见的是在 wp-config.php 中定义,但也可以在其他地方定义)中获取值。
以下 query 获取环境常量 GITHUB_ACCESS_TOKEN,该常量可用于访问 GitHub 上的私有仓库:
query {
githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
}邮件发送
GraphQL 模式提供了全局 mutation _sendEmail。
Mutation _sendEmail 通过执行 WordPress 的 wp_mail 函数发送邮件。因此,它将使用 WordPress 中配置的邮件发送设置(如使用的 SMTP 提供商)。
邮件可以以 "text" 或 "HTML" 内容类型发送,具体取决于 messageAs 输入的值(messageAs 是一个 "oneof" InputObject,因此只能提供其属性之一)。
mutation {
_sendEmail(
input: {
to: "target@email.com"
subject: "Email with text content"
messageAs: {
text: "Hello world!"
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
}
}