Schema Functions
Exposez les fonctionnalités du langage de programmation PHP via des champs et des directives GraphQL.

Click to watch tutorial video - 07:54
Le schéma GraphQL est enrichi de champs et de directives qui exposent les fonctionnalités du langage de programmation PHP.
Champs de fonction
Les champs de fonction sont des champs globaux, et sont donc ajoutés à tous les types du schéma GraphQL : dans QueryRoot, mais aussi dans Post, User, etc.
Les champs de fonction sont utiles pour manipuler les données une fois récupérées, nous permettant de transformer la valeur d'un champ de la manière requise, et nous accordant de puissantes capacités d'import/export de données.
Par exemple, bien que nous disposions d'un champ Post.hasComments, nous pourrions avoir besoin de la valeur opposée. Plutôt que de créer un nouveau champ Post.notHasComments (ce qui nécessiterait de modifier le code PHP), nous pouvons utiliser la fonctionnalité Field to Input pour transmettre la valeur de hasComments à un champ not, calculant ainsi la nouvelle valeur entièrement dans la requête GraphQL :
query {
posts {
id
hasComments
notHasComments: _not(value: $__hasComments)
}
}Directives de fonction
Le schéma GraphQL est enrichi de directives qui exposent des fonctionnalités couramment présentes dans les langages de programmation (comme PHP).
Les directives de champ sont utiles pour manipuler les données une fois récupérées, nous permettant de transformer la valeur d'un champ de la manière requise, et nous accordant de puissantes capacités d'import/export de données.
Par exemple, cette requête :
query {
posts {
title @strUpperCase
}
}...produira cette réponse :
{
"data": {
"posts": [
{
"title": "HELLO WORLD!"
},
{
"title": "LOVELY WEATHER"
}
]
}
}Champs auxiliaires
Le schéma GraphQL est enrichi de champs fournissant des fonctionnalités auxiliaires couramment utilisées.
Les champs auxiliaires sont des champs globaux, et sont donc ajoutés à tous les types du schéma GraphQL : dans QueryRoot, mais aussi dans Post, User, etc.
Dans cette requête, nous récupérons les identifiants des utilisateurs du site et exécutons une nouvelle requête GraphQL en passant leur identifiant en paramètre :
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
}
}
}Champs d'environnement
Le schéma GraphQL est enrichi du champ global _env, qui permet d'obtenir la valeur d'une variable d'environnement ou d'une constante PHP (le plus souvent définie dans wp-config.php, mais pouvant aussi être définie ailleurs).
Cette requête récupère la constante d'environnement GITHUB_ACCESS_TOKEN que nous pourrions configurer pour accéder à un dépôt privé sur GitHub :
query {
githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
}Envoi d'e-mails
Le schéma GraphQL est enrichi de la mutation globale _sendEmail.
La mutation _sendEmail envoie des e-mails en exécutant la fonction WordPress wp_mail. Elle utilisera donc la configuration définie pour l'envoi d'e-mails dans WordPress (comme le fournisseur SMTP à utiliser).
L'e-mail peut être envoyé avec le type de contenu « text » ou « HTML », selon la valeur de l'entrée messageAs (qui est un InputObject « oneof », de sorte que seule l'une de ses propriétés peut être fournie).
mutation {
_sendEmail(
input: {
to: "target@email.com"
subject: "Email with text content"
messageAs: {
text: "Hello world!"
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
}
}