Schema Functions
Udostępniaj funkcjonalności języka programowania PHP poprzez pola i dyrektywy GraphQL.

Click to watch tutorial video - 07:54
Schema GraphQL jest wzbogacona o pola i dyrektywy, które udostępniają funkcjonalności języka programowania PHP.
Pola Funkcji
Pola funkcji są polami globalnymi, dlatego są dodawane do każdego typu w schemacie GraphQL: w QueryRoot, ale także w Post, User itd.
Pola funkcji są przydatne do manipulowania danymi po ich pobraniu, umożliwiając transformację wartości pola w dowolny wymagany sposób oraz zapewniając potężne możliwości importu/eksportu danych.
Na przykład, choć mamy pole Post.hasComments, możemy potrzebować wartości przeciwnej. Zamiast tworzyć nowe pole Post.notHasComments (do czego musielibyśmy edytować kod PHP), możemy użyć funkcji Field to Input, aby przekazać wartość z hasComments do pola not, obliczając w ten sposób nową wartość bezpośrednio w ramach query GraphQL:
query {
posts {
id
hasComments
notHasComments: _not(value: $__hasComments)
}
}Dyrektywy Funkcji
Schema GraphQL jest wzbogacona o dyrektywy, które udostępniają funkcjonalności powszechnie spotykane w językach programowania (takich jak PHP).
Pola dyrektyw są przydatne do manipulowania danymi po ich pobraniu, umożliwiając transformację wartości pola w dowolny wymagany sposób oraz zapewniając potężne możliwości importu/eksportu danych.
Na przykład ta query:
query {
posts {
title @strUpperCase
}
}...wyprodukuje następującą odpowiedź:
{
"data": {
"posts": [
{
"title": "HELLO WORLD!"
},
{
"title": "LOVELY WEATHER"
}
]
}
}Pola Pomocnicze
Schema GraphQL jest wzbogacona o pola zapewniające powszechnie używane funkcje pomocnicze.
Pola pomocnicze są polami globalnymi, dlatego są dodawane do każdego typu w schemacie GraphQL: w QueryRoot, ale także w Post, User itd.
W tej query pobieramy identyfikatory użytkowników witryny i wykonujemy nową query GraphQL, przekazując ich identyfikatory jako parametr:
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
}
}
}Pola Środowiskowe
Schema GraphQL jest wzbogacona o globalne pole _env, które umożliwia pobranie wartości ze zmiennej środowiskowej lub ze stałej PHP (najczęściej definiowanej w wp-config.php, ale możliwej do zdefiniowania również w innych miejscach).
Ta query pobiera stałą środowiskową GITHUB_ACCESS_TOKEN, którą możemy skonfigurować, aby uzyskać dostęp do prywatnego repozytorium na GitHub:
query {
githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
}Wysyłanie E-maili
Schema GraphQL jest wzbogacona o globalną mutację _sendEmail.
Mutacja _sendEmail wysyła e-maile, wykonując funkcję WordPress wp_mail. W rezultacie będzie korzystać z konfiguracji zdefiniowanej do wysyłania e-maili w WordPress (np. z dostawcy SMTP).
E-mail można wysłać z typem treści "text" lub "HTML", w zależności od wartości wejścia messageAs (które jest InputObject typu "oneof", dzięki czemu można podać tylko jedną z jego właściwości).
mutation {
_sendEmail(
input: {
to: "target@email.com"
subject: "Email with text content"
messageAs: {
text: "Hello world!"
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
}
}