PHP-Funktionen via Schema
Diese Erweiterung fügt dem GraphQL-Schema Felder und Direktiven hinzu, die Funktionalitäten verfügbar machen, die häufig in Programmiersprachen (wie PHP) vorhanden sind.
Beschreibung
Funktionsfelder und -direktiven sind nützlich, um Daten nach dem Abruf zu manipulieren. Sie erlauben es dir, einen Feldwert auf jede gewünschte Weise zu transformieren, und geben dir leistungsstarke Datenimport-/-exportmöglichkeiten.
Diese query, die eine Vielzahl von Funktionsfeldern und -direktiven enthält:
{
_intAdd(add: 15, to: 56)
_intArraySum(array: [1, 2, 3, 4, 5])
_arrayJoin(array: ["Hello", "to", "everyone"], separator: " ")
_arrayItem(array: ["one", "two", "three", "four", "five"], position: 3)
_arraySearch(array: ["uno", "dos", "tres", "cuatro", "cinco"], element: "tres")
_arrayUnique(array: ["uno", "dos", "uno", "tres", "cuatro", "dos", "cinco", "dos"])
_arrayMerge(arrays: [["uno", "dos", "uno"], ["tres", "cuatro", "dos", "cinco", "dos"]])
_arrayDiff(arrays: [["uno", "dos"], ["tres", "cuatro", "dos"]])
_arrayAddItem(array: ["uno", "dos"], value: "tres")
_arraySetItem(array: ["uno", "dos"], index: 0, value: "tres")
_arrayKeys(array: ["uno", "dos", "tres"])
_arrayLength(array: ["uno", "dos", "tres"])
_strRegexFindMatches(regex: "/https?:\\/\\/([a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\\.[a-zA-Z]{2,})/", string: "In website https://gatographql.com there is more information")
_strReplace(search: "https://", replaceWith: "http://", in: "https://gatographql.com")
_strReplaceMultiple(search: ["https://", "gato"], replaceWith: ["http://", "dog"], in: "https://gatographql.com")
_strRegexReplace(searchRegex: "/^https?:\\/\\//", replaceWith: "", in: "https://gatographql.com")
_strRegexReplaceMultiple(searchRegex: ["/^https?:\\/\\//", "/([a-z]*)/"], replaceWith: ["", "$1$1"], in: "https://gatographql.com")
_strStartsWith(search: "orld", in: "Hello world")
_strEndsWith(search: "orld", in: "Hello world")
_strUpperCase(text: "Hello world")
_strLowerCase(text: "Hello world")
_strTitleCase(text: "Hello world")
falseToTrue: _echo(value: false) @boolOpposite
trueToFalse: _echo(value: true) @boolOpposite
plusOne: _echo(value: 2) @intAdd(number: 1)
objectAddEntry: _echo(value: {
user: "Leo",
contact: {
email: "leo@test.com"
}
})
@objectAddEntry(key: "phone", value: "+0929094229", underPath: "contact")
@objectAddEntry(key: "methods", value: {}, underPath: "contact")
@objectAddEntry(key: "card", value: true, underPath: "contact.methods")
upperCase: _echo(value: "Hello world") @strUpperCase
lowerCase: _echo(value: "Hello world") @strLowerCase
titleCase: _echo(value: "Hello world") @strTitleCase
append: _echo(value: "Hello world") @strAppend(string: "!!!")
prepend: _echo(value: "Hello world") @strPrepend(string: "!!!")
arraySplice: _echo(value: ["uno", "dos", "tres"]) @arraySplice(offset: 1)
arraySpliceWithLength: _echo(value: ["uno", "dos", "tres"]) @arraySplice(offset: 1, length: 1)
arraySpliceWithReplacement: _echo(value: ["uno", "dos", "tres"]) @arraySplice(offset: 1, replacement: ["cuatro", "cinco"])
arraySpliceWithLengthAndReplacement: _echo(value: ["uno", "dos", "tres"]) @arraySplice(offset: 1, length: 1, replacement: ["cuatro", "cinco"])
arrayUnique: _echo(value: ["uno", "dos", "uno", "tres", "cuatro", "dos", "cinco", "dos"]) @arrayUnique
arrayMerge: _echo(value: ["uno", "dos", "uno"]) @arrayMerge(with: ["tres", "cuatro", "dos", "cinco", "dos"])
arrayDiff: _echo(value: ["uno", "dos"]) @arrayDiff (against: ["tres", "cuatro", "dos"])
arrayFilter: _echo(value: ["uno", "dos", null, "tres", "", "dos", []]) @arrayFilter
objectKeepProperties: _echo(value: { user: "Leo", email: "leo@test.com" } )
@objectKeepProperties(
keys: ["user"]
)
}...erzeugt:
{
"data": {
"_intAdd": 71,
"_intArraySum": 15,
"_arrayJoin": "Hello to everyone",
"_arrayItem": "four",
"_arraySearch": 2,
"_arrayUnique": [
"uno",
"dos",
"tres",
"cuatro",
"cinco"
],
"_arrayMerge": [
"uno",
"dos",
"uno",
"tres",
"cuatro",
"dos",
"cinco",
"dos"
],
"_arrayDiff": [
"uno"
],
"_arrayAddItem": [
"uno",
"dos",
"tres"
],
"_arraySetItem": [
"tres",
"dos"
],
"_arrayKeys": [
0,
1,
2
],
"_arrayLength": 3,
"_strRegexFindMatches": [
[
"https:\/\/gatographql.com"
],
[
"gatographql.com"
]
],
"_strReplace": "http://gatographql.com",
"_strReplaceMultiple": "http://doggraphql.com",
"_strRegexReplace": "gatographql.com",
"_strRegexReplaceMultiple": "gatographqlgatographql.comcom",
"_strStartsWith": false,
"_strEndsWith": true,
"_strUpperCase": "HELLO WORLD",
"_strLowerCase": "hello world",
"_strTitleCase": "Hello World",
"falseToTrue": true,
"trueToFalse": false,
"plusOne": 3,
"objectAddEntry": {
"user": "Leo",
"contact": {
"email": "leo@test.com",
"phone": "+0929094229",
"methods": {
"card": true
}
}
},
"upperCase": "HELLO WORLD",
"lowerCase": "hello world",
"titleCase": "Hello World",
"append": "Hello world!!!",
"prepend": "!!!Hello world",
"arraySplice": [
"uno"
],
"arraySpliceWithLength": [
"uno",
"tres"
],
"arraySpliceWithReplacement": [
"uno",
"cuatro",
"cinco"
],
"arraySpliceWithLengthAndReplacement": [
"uno",
"cuatro",
"cinco",
"tres"
],
"arrayUnique": [
"uno",
"dos",
"tres",
"cuatro",
"cinco"
],
"arrayMerge": [
"uno",
"dos",
"uno",
"tres",
"cuatro",
"dos",
"cinco",
"dos"
],
"arrayDiff": [
"uno"
],
"arrayFilter": [
"uno",
"dos",
"tres",
"dos"
],
"objectKeepProperties": {
"user": "Leo"
}
}
}Funktionsfelder
Funktionsfelder sind Globale Felder, daher werden sie jedem einzelnen Typ im GraphQL-Schema hinzugefügt: in QueryRoot, aber auch in Post, User, usw.
Dies ist die Liste der Funktionsfelder.
_and
Gibt eine AND-Operation zwischen mehreren booleschen Eigenschaften zurück.
_arrayAddItem
Fügt ein Element zum Array hinzu.
_arrayCombine
Erstellt ein JSON-Objekt, das die Elemente eines Arrays als Schlüssel und die Elemente eines anderen Arrays als Werte verwendet.
_arrayChunk
Teilt ein Array in Abschnitte auf.
_arrayDiff
Gibt ein Array zurück, das alle Elemente des ersten Arrays enthält, die in keinem der anderen Arrays vorhanden sind.
_arrayEncodeAsJSONString
JSON-kodiert ein Array als String.
_arrayFill
Erstellt ein Array, das mit Werten gefüllt ist.
_arrayFilter
Filtert null- oder leere Elemente aus dem Array heraus.
_arrayFlipToObject
Tauscht alle numerischen Schlüssel mit ihren zugehörigen Werten in einem Array aus und gibt ein Objekt zurück.
_arrayInnerJoinJSONObjectProperties
Befüllt die JSON-Objekte in einem Ziel-Array mit Eigenschaften aus einem JSON-Objekt eines Quell-Arrays, bei dem eine bestimmte Eigenschaft für beide Objekte gleich ist.
_arrayItem
Greift auf das Element an der angegebenen Position im Array zu.
_arrayJoin
Verbindet alle Strings in einem Array mit einem angegebenen Trennzeichen.
_arrayKeys
Schlüssel in einem Array.
_arrayLength
Anzahl der Elemente in einem Array.
_arrayMerge
Führt zwei oder mehr Arrays zusammen.
_arrayPad
Füllt ein Array bis zur angegebenen Länge mit einem Wert auf.
_arrayRandom
Wählt zufällig ein Element aus den angegebenen aus.
_arrayRemoveFirst
Entfernt das erste Element im Array.
_arrayRemoveLast
Entfernt das letzte Element im Array.
_arrayReverse
Kehrt ein Array um.
_arraySearch
Sucht, an welcher Position sich ein Element im Array befindet. Wenn es gefunden wird, gibt es seine Position zurück, andernfalls gibt es false zurück.
_arraySetItem
Setzt ein Element an eine bestimmte Position des Arrays.
_arraySlice
Extrahiert einen Ausschnitt eines Arrays.
_arraySplice
Entfernt einen Teil eines Arrays und ersetzt ihn durch etwas anderes.
_arrayUnique
Filtert alle duplizierten Elemente im Array heraus.
_date
Gibt einen String zurück, der gemäß dem angegebenen Formatstring unter Verwendung des angegebenen Integer-timestamp (Unix-Timestamp) oder der aktuellen Zeit formatiert ist, wenn kein Timestamp angegeben wird. Mit anderen Worten: timestamp ist optional und hat standardmäßig den Wert von time() (bereitgestellt über das Feld _time).
_echo
Gibt die Eingabe unverändert zurück, egal was sie ist.
_equals
Gibt an, ob das Ergebnis eines Feldes einem bestimmten Wert entspricht.
_floatCeil
Rundet eine Zahl auf die nächste höhere ganze Zahl auf.
_floatDivide
Dividiert eine Zahl durch eine andere Zahl.
_greaterThan
Gibt an, ob Zahl1 > Zahl2 ist.
_greaterThanOrEquals
Gibt an, ob Zahl1 >= Zahl2 ist.
_if
Wenn eine boolesche Eigenschaft wahr ist, wird ein Feld ausgeführt, andernfalls wird ein anderes Feld ausgeführt.
_inArray
Gibt an, ob das Array den Wert enthält.
_intAdd
Addiert eine ganze Zahl zu einer anderen ganzen Zahl.
_intArraySum
Summe der ganzzahligen Elemente im Array.
_intMultiply
Multipliziert eine ganze Zahl mit einer anderen ganzen Zahl.
_intSubtract
Subtrahiert eine ganze Zahl von einer anderen ganzen Zahl.
_isEmpty
Gibt an, ob ein Wert leer ist.
_isNull
Gibt an, ob ein Wert null ist.
_lowerThan
Gibt an, ob Zahl1 < Zahl2 ist.
_lowerThanOrEquals
Gibt an, ob Zahl1 <= Zahl2 ist.
_makeTime
Gibt den Unix-Timestamp zurück, der den angegebenen Argumenten entspricht. Dieser Timestamp ist ein langer Integer, der die Anzahl der Sekunden zwischen der Unix-Epoche (1. Januar 1970 00:00:00 GMT) und der angegebenen Zeit enthält.
Alle optionalen Argumente, die weggelassen oder null sind, werden auf den aktuellen Wert gemäß Datum und Uhrzeit der lokalen Zeit gesetzt.
_not
Gibt den entgegengesetzten Wert einer booleschen Eigenschaft zurück.
_notEmpty
Gibt an, ob der Wert nicht leer ist.
_notEquals
Gibt an, ob die beiden Werte nicht gleich sind.
_notInArray
Gibt an, ob das Array den Wert nicht enthält.
_notNull
Gibt an, ob der Wert nicht null ist.
_objectAddEntry
Fügt dem Objekt einen Eintrag hinzu.
_objectEncodeAsJSONString
JSON-kodiert ein Objekt als String.
_objectFilter
Filtert null- oder leere Elemente im Objekt heraus.
_objectFlip
Tauscht Schlüssel und Werte in einem JSON-Objekt.
_objectIntersectKey
Berechnet den Schnittmengen von Objekten anhand von Schlüsselvergleichen.
_objectKeepProperties
Behält nur bestimmte Eigenschaften im JSON-Objekt.
_objectMerge
Führt zwei oder mehr Objekte zusammen.
_objectProperties
Ruft die Eigenschaften eines JSON-Objekts ab.
_objectProperty
Ruft eine Eigenschaft aus einem JSON-Objekt ab.
_objectRemoveEntry
Entfernt einen Eintrag aus dem JSON-Objekt.
_objectRemoveProperties
Entfernt einen oder mehrere Einträge aus dem JSON-Objekt.
_objectValues
Ruft die Werte eines JSON-Objekts ab.
_or
Gibt eine OR-Operation zwischen mehreren booleschen Eigenschaften zurück.
_propertyExistsInJSONObject
Gibt an, ob eine Eigenschaft in einem JSON-Objekt vorhanden ist.
_propertyIsSetInJSONObject
Gibt an, ob eine Eigenschaft in einem JSON-Objekt vorhanden und nicht null ist.
_sprintf
Ersetzt Platzhalter innerhalb eines Strings durch angegebene Werte.
_strAppend
Hängt einen String an einen anderen String an.
_strArrayReplace
Ersetzt einen String durch einen anderen String in einem Array.
_strArrayReplaceMultiple
Ersetzt eine Liste von Strings durch eine andere Liste von Strings in einem Array.
_strContains
Gibt an, ob ein String einen anderen String enthält.
_strDecodeJSONObject
Dekodiert einen String in ein JSON-Objekt oder gibt null zurück, wenn dies nicht möglich ist.
_strDecodeList
Dekodiert einen String in ein Array (beliebigen Typs) oder gibt null zurück, wenn dies nicht möglich ist.
_strEndsWith
Gibt an, ob ein String mit einem anderen String endet.
_strLength
Länge des Strings.
_strLowerCase
Wandelt einen String in Kleinbuchstaben um.
_strPad
Füllt einen String bis zu einer bestimmten Länge mit einem anderen String auf.
_strPos
Position eines Teilstrings innerhalb des Strings oder null, wenn er nicht gefunden wurde.
_strRegexFindMatches
Führt einen regulären Ausdruck aus, um alle Treffer aus einem String zu extrahieren.
_strRegexReplace
Führt einen regulären Ausdruck aus, um einen String zu suchen und zu ersetzen.
_strRegexReplaceMultiple
Führt reguläre Ausdrücke aus, um Strings zu suchen und zu ersetzen.
_strRepeat
Wiederholt einen String.
_strReplace
Ersetzt einen String durch einen anderen String.
_strReplaceMultiple
Ersetzt eine Liste von Strings durch eine andere Liste von Strings.
_strReverse
Kehrt einen String um.
_strShuffle
Mischt einen String zufällig durch.
_strStartsWith
Gibt an, ob ein String mit einem anderen String beginnt.
_strStripSlashes
Gibt einen String zurück, aus dem Backslashes entfernt wurden. (\' wird zu ' usw.) Doppelte Backslashes (\\) werden zu einem einzelnen Backslash (\).
_strSubstr
Gibt einen Teil eines Strings zurück.
_strTitleCase
Wandelt einen String in Titelschreibweise um.
_strToTime
Parst nahezu jede englischsprachige Textbeschreibung für Datum und Uhrzeit in einen Unix-Timestamp.
_strTrim
Entfernt Leerzeichen (oder andere Zeichen) vom Anfang und Ende eines Strings.
_strUpperCase
Wandelt einen String in Großbuchstaben um.
_strWordCount
Anzahl der Wörter im String.
_time
Gibt die aktuelle Zeit zurück.
Funktionsdirektiven
Dies ist die Liste der Funktionsdirektiven.
@arrayAddItem
Fügt ein Element zum Array hinzu.
@arrayDiff
Berechnet die Differenz mit einem anderen Array.
@arrayFilter
Filtert null- oder leere Elemente im Array heraus.
@arrayMerge
Führt das Array mit einem anderen Array zusammen.
@arrayPad
Füllt ein Array bis zur angegebenen Länge mit einem Wert auf.
@arrayRemoveFirst
Entfernt das erste Element im Array.
@arrayRemoveLast
Entfernt das letzte Element im Array.
@arrayReverse
Kehrt ein Array um.
@arraySetItem
Setzt ein Element an eine bestimmte Position des Arrays.
@arraySlice
Extrahiert einen Ausschnitt eines Arrays.
@arraySplice
Entfernt einen Teil eines Arrays und ersetzt ihn durch etwas anderes.
@arrayUnique
Filtert alle duplizierten Elemente im Array heraus.
@boolOpposite
Wandelt einen booleschen Wert in seinen entgegengesetzten Wert um.
@floatDivide
Dividiert den Feldwert durch eine Gleitkommazahl.
@intAdd
Addiert eine ganze Zahl zum Feldwert.
@intMultiply
Multipliziert eine ganze Zahl mit dem Feldwert.
@intSubtract
Subtrahiert eine ganze Zahl vom Feldwert.
@objectAddEntry
Fügt dem JSON-Objekt einen Eintrag hinzu.
@objectFilter
Filtert null- oder leere Elemente in einem Objekt heraus.
@objectKeepProperties
Behält nur bestimmte Eigenschaften aus dem JSON-Objekt.
@objectRemoveEntry
Entfernt einen Eintrag aus dem JSON-Objekt.
@objectRemoveProperties
Entfernt bestimmte Eigenschaften aus dem JSON-Objekt.
@setNull
Setzt den Feldwert auf null.
@strAppend
Hängt einen String an das Ende des Strings im Feldwert an.
@strLowerCase
Wandelt einen String in Kleinbuchstaben um.
@strPad
Füllt einen String bis zu einer bestimmten Länge mit einem anderen String auf.
@strPrepend
Hängt einen String an den Anfang des Strings im Feldwert an.
@strRegexReplace
Führt einen regulären Ausdruck aus, um einen String zu suchen und zu ersetzen (siehe Dokumentation zur PHP-Funktion preg_replace).
@strRegexReplaceMultiple
Führt reguläre Ausdrücke aus, um eine Liste von Strings zu suchen und zu ersetzen (siehe Dokumentation zur PHP-Funktion preg_replace).
@strRepeat
Wiederholt einen String.
@strReplace
Ersetzt einen String durch einen anderen String.
@strReplaceMultiple
Ersetzt eine Liste von Strings durch eine andere Liste von Strings.
@strReverse
Kehrt einen String um.
@strShuffle
Mischt einen String zufällig durch.
@strStripSlashes
Gibt einen String zurück, aus dem Backslashes entfernt wurden. (\' wird zu ' usw.) Doppelte Backslashes (\\) werden zu einem einzelnen Backslash.
@strSubstr
Gibt einen Teil eines Strings zurück.
@strTitleCase
Wandelt einen String in Titelschreibweise um.
@strTrim
Entfernt Leerzeichen (oder andere Zeichen) vom Anfang und Ende eines Strings.
@strUpperCase
Wandelt einen String in Großbuchstaben um.
Beispiele
Funktionsfelder
Obwohl wir ein Feld Post.hasComments haben, benötigen wir möglicherweise den entgegengesetzten Wert. Anstatt ein neues Feld Post.notHasComments zu erstellen (wofür wir PHP-Code bearbeiten müssten), können wir die Funktion Field to Input verwenden, um den Wert von hasComments in ein not-Feld einzugeben und so den neuen Wert stets innerhalb der GraphQL-query zu berechnen:
{
posts {
id
hasComments
notHasComments: _not(value: $__hasComments)
}
}Wir können Funktionsfelder mehrfach anwenden, um eine komplexere Berechnung durchzuführen, z. B. ein summary-Feld auf Basis der Werte anderer Felder zu generieren:
{
posts {
id
content @remove
shortContent: _strSubstr(string: $__content, offset: 0, length: 150) @remove
excerpt @remove
isExcerptEmpty: _isEmpty(value: $__excerpt) @remove
summary: _if(
condition: $__isExcerptEmpty
then: $__content
else: $__excerpt
)
}
}In Kombination mit der HTTP Client-Erweiterung können wir dynamisch einen API-Endpunkt generieren, mit dem wir uns verbinden (basierend auf den Daten unserer Website), und dann ein bestimmtes Feld aus den zurückgegebenen Daten extrahieren:
{
users(
pagination: { limit: 2 },
sort: { order: ASC, by: ID }
) {
id
# Dynamically generate endpoint for the user
endpoint: _arrayJoin(values: [
"https://newapi.getpop.org/wp-json/wp/v2/users/",
$__id,
"?_fields=name,avatar_urls"
])
# Retrieve the endpoint data
endpointData: _sendJSONObjectItemHTTPRequest(input: { url: $__endpoint } )
# Extract specific information
userAvatar: _objectProperty(
object: $__endpointData,
by: {
path: "avatar_urls.48"
}
)
}
}...erzeugt:
{
"data": {
"users": [
{
"id": 1,
"endpoint": "https://newapi.getpop.org/wp-json/wp/v2/users/1?_fields=name,avatar_urls",
"endpointData": {
"name": "leo",
"avatar_urls": {
"24": "https://secure.gravatar.com/avatar/b28085726ee66e49f08be16ad668efd5?s=24&d=mm&r=g",
"48": "https://secure.gravatar.com/avatar/b28085726ee66e49f08be16ad668efd5?s=48&d=mm&r=g",
"96": "https://secure.gravatar.com/avatar/b28085726ee66e49f08be16ad668efd5?s=96&d=mm&r=g"
},
"_links": {
"self": [
{
"href": "https://newapi.getpop.org/wp-json/wp/v2/users/1"
}
],
"collection": [
{
"href": "https://newapi.getpop.org/wp-json/wp/v2/users"
}
]
}
},
"userAvatar": "https://secure.gravatar.com/avatar/b28085726ee66e49f08be16ad668efd5?s=48&d=mm&r=g"
},
{
"id": 2,
"endpoint": "https://newapi.getpop.org/wp-json/wp/v2/users/2?_fields=name,avatar_urls",
"endpointData": {
"name": "themedemos",
"avatar_urls": {
"24": "https://secure.gravatar.com/avatar/7554514b65216821eeacde0fdcd6c6e6?s=24&d=mm&r=g",
"48": "https://secure.gravatar.com/avatar/7554514b65216821eeacde0fdcd6c6e6?s=48&d=mm&r=g",
"96": "https://secure.gravatar.com/avatar/7554514b65216821eeacde0fdcd6c6e6?s=96&d=mm&r=g"
},
"_links": {
"self": [
{
"href": "https://newapi.getpop.org/wp-json/wp/v2/users/2"
}
],
"collection": [
{
"href": "https://newapi.getpop.org/wp-json/wp/v2/users"
}
]
}
},
"userAvatar": "https://secure.gravatar.com/avatar/7554514b65216821eeacde0fdcd6c6e6?s=48&d=mm&r=g"
}
]
}
}Funktionsdirektiven
Wenn diese query:
query {
posts {
title
}
}...diese Ergebnisse liefert:
{
"data": {
"posts": [
{
"title": "Hello world!"
},
{
"title": "lovely weather"
}
]
}
}...dann wird diese query:
query {
posts {
title @strUpperCase
}
}...Folgendes erzeugen:
{
"data": {
"posts": [
{
"title": "HELLO WORLD!"
},
{
"title": "LOVELY WEATHER"
}
]
}
}