Schema-Funktionen
Schema-FunktionenPHP-Funktionen via Schema

PHP-Funktionen via Schema

Included in the “Power Extensions” bundle

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"
      }
    ]
  }
}