Schemafuncties
SchemafunctiesPHP-functies via Schema

PHP-functies via Schema

Included in the β€œPower Extensions” bundle

Deze extensie voegt velden en directives toe aan het GraphQL-schema die functionaliteiten beschikbaar stellen die gangbaar zijn in programmeertalen (zoals PHP).

Beschrijving

Functievelden en -directives zijn handig voor het manipuleren van gegevens nadat ze zijn opgehaald. Ze stellen je in staat om een veldwaarde op elke gewenste manier te transformeren en bieden krachtige mogelijkheden voor data-import/-export.

Deze query, met een verscheidenheid aan functievelden en -directives:

{
  _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"]
    )
}

...geeft als resultaat:

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

Functievelden

Functievelden zijn Globale Velden en worden daarom toegevoegd aan elk type in het GraphQL-schema: in QueryRoot, maar ook in Post, User, enz.

Hieronder vind je de lijst met functievelden.

_and

Geeft het resultaat van een AND-bewerking op meerdere booleaanse eigenschappen terug.

_arrayAddItem

Voegt een element toe aan de array.

_arrayCombine

Maakt een JSON-object aan met de elementen van een array als sleutels en de elementen van een andere array als waarden.

_arrayChunk

Verdeelt een array in stukken.

_arrayDiff

Geeft een array terug met alle elementen uit de eerste array die niet aanwezig zijn in een van de andere arrays.

_arrayEncodeAsJSONString

Codeert een array als JSON-tekenreeks.

_arrayFill

Maakt een array aan die gevuld is met waarden.

_arrayFilter

Filtert de null- of lege elementen uit de array.

_arrayFlipToObject

Wisselt alle numerieke sleutels uit met hun bijbehorende waarden in een array en geeft een object terug.

_arrayInnerJoinJSONObjectProperties

Vult de JSON-objecten in een doelarray aan met eigenschappen van een JSON-object uit een bronarray, waarbij een bepaalde eigenschap voor beide objecten gelijk is.

_arrayItem

Geeft toegang tot het element op de opgegeven positie in de array.

_arrayJoin

Voegt alle tekenreeksen in een array samen met behulp van een opgegeven scheidingsteken.

_arrayKeys

Sleutels in een array.

_arrayLength

Aantal elementen in een array.

_arrayMerge

Samenvoegen van twee of meer arrays.

_arrayPad

Vult een array aan tot de opgegeven lengte met een waarde.

_arrayRandom

Kiest willekeurig een element uit de opgegeven elementen.

_arrayRemoveFirst

Verwijdert het eerste element uit de array.

_arrayRemoveLast

Verwijdert het laatste element uit de array.

_arrayReverse

Keert een array om.

_arraySearch

Zoekt op welke positie een element in de array staat. Als het gevonden wordt, geeft het de positie terug; anders geeft het false terug.

_arraySetItem

Stelt een element in op een bepaalde positie in de array.

_arraySlice

Extraheert een deel van een array.

_arraySplice

Verwijdert een deel van een array en vervangt het door iets anders.

_arrayUnique

Filtert alle dubbele elementen uit de array.

_date

Geeft een tekenreeks terug die is opgemaakt volgens de opgegeven formaattekenreeks, met de opgegeven integer timestamp (Unix-tijdstempel) of de huidige tijd als er geen tijdstempel is opgegeven. Met andere woorden: timestamp is optioneel en heeft standaard de waarde van time() (geleverd via het veld _time).

_echo

Geeft de invoer terug, wat het ook is.

_equals

Geeft aan of het resultaat van een veld gelijk is aan een bepaalde waarde.

_floatCeil

Rondt een getal naar boven af op het eerstvolgende hogere gehele getal.

_floatDivide

Deelt een getal door een ander getal.

_greaterThan

Geeft aan of getal1 > getal2.

_greaterThanOrEquals

Geeft aan of getal1 >= getal2.

_if

Als een booleaanse eigenschap waar is, voert het een veld uit; anders voert het een ander veld uit.

_inArray

Geeft aan of de array de waarde bevat.

_intAdd

Telt een geheel getal op bij een ander geheel getal.

_intArraySum

Som van de gehele getallen in de array.

_intMultiply

Vermenigvuldigt een geheel getal met een ander geheel getal.

_intSubtract

Trekt een geheel getal af van een ander geheel getal.

_isEmpty

Geeft aan of een waarde leeg is.

_isNull

Geeft aan of een waarde null is.

_lowerThan

Geeft aan of getal1 < getal2.

_lowerThanOrEquals

Geeft aan of getal1 <= getal2.

_makeTime

Geeft de Unix-tijdstempel terug die overeenkomt met de opgegeven argumenten. Deze tijdstempel is een lang geheel getal dat het aantal seconden bevat tussen de Unix Epoch (1 januari 1970 00:00:00 GMT) en de opgegeven tijd.

Optionele argumenten die worden weggelaten of null zijn, worden ingesteld op de huidige waarde op basis van de lokale datum en tijd.

_not

Geeft de tegengestelde waarde van een booleaanse eigenschap terug.

_notEmpty

Geeft aan of de waarde niet leeg is.

_notEquals

Geeft aan of de twee waarden niet aan elkaar gelijk zijn.

_notInArray

Geeft aan of de array de waarde niet bevat.

_notNull

Geeft aan of de waarde niet null is.

_objectAddEntry

Voegt een item toe aan het object.

_objectEncodeAsJSONString

Codeert een object als JSON-tekenreeks.

_objectFilter

Filtert de null- of lege elementen uit het object.

_objectFlip

Verwisselt de sleutels en waarden in een JSON-object.

_objectIntersectKey

Berekent de doorsnede van objecten op basis van sleutels.

_objectKeepProperties

Behoudt alleen specifieke eigenschappen in het JSON-object.

_objectMerge

Samenvoegen van twee of meer objecten.

_objectProperties

Haalt de eigenschappen op van een JSON-object.

_objectProperty

Haalt een eigenschap op uit een JSON-object.

_objectRemoveEntry

Verwijdert een item uit het JSON-object.

_objectRemoveProperties

Verwijdert een of meer items uit het JSON-object.

_objectValues

Haalt de waarden op uit een JSON-object.

_or

Geeft het resultaat van een OR-bewerking op meerdere booleaanse eigenschappen terug.

_propertyExistsInJSONObject

Geeft aan of een eigenschap bestaat in een JSON-object.

_propertyIsSetInJSONObject

Geeft aan of een eigenschap bestaat en niet null is in een JSON-object.

_sprintf

Vervangt plaatshouders in een tekenreeks door opgegeven waarden.

_strAppend

Voegt een tekenreeks toe aan een andere tekenreeks.

_strArrayReplace

Vervangt een tekenreeks door een andere tekenreeks in een array.

_strArrayReplaceMultiple

Vervangt een lijst tekenreeksen door een andere lijst tekenreeksen in een array.

_strContains

Geeft aan of een tekenreeks een andere tekenreeks bevat.

_strDecodeJSONObject

Decodeert een tekenreeks naar een JSON-object, of geeft null terug als dat niet mogelijk is.

_strDecodeList

Decodeert een tekenreeks naar een array (van elk type), of geeft null terug als dat niet mogelijk is.

_strEndsWith

Geeft aan of een tekenreeks eindigt met een andere tekenreeks.

_strLength

Lengte van de tekenreeks.

_strLowerCase

Zet een tekenreeks om naar kleine letters.

_strPad

Vult een tekenreeks aan tot een bepaalde lengte met een andere tekenreeks.

_strPos

Positie van een deeltekenreeks binnen de tekenreeks, of null als deze niet gevonden wordt.

_strRegexFindMatches

Voert een reguliere expressie uit om alle overeenkomsten uit een tekenreeks te extraheren.

_strRegexReplace

Voert een reguliere expressie uit om een tekenreeks te zoeken en te vervangen.

_strRegexReplaceMultiple

Voert reguliere expressies uit om tekenreeksen te zoeken en te vervangen.

_strRepeat

Herhaalt een tekenreeks.

_strReplace

Vervangt een tekenreeks door een andere tekenreeks.

_strReplaceMultiple

Vervangt een lijst tekenreeksen door een andere lijst tekenreeksen.

_strReverse

Keert een tekenreeks om.

_strShuffle

Schudt een tekenreeks willekeurig door elkaar.

_strStartsWith

Geeft aan of een tekenreeks begint met een andere tekenreeks.

_strStripSlashes

Geeft een tekenreeks terug waaruit backslashes zijn verwijderd. (\' wordt ' enzovoort.) Dubbele backslashes (\\) worden omgezet naar een enkele backslash (\).

_strSubstr

Geeft een deel van een tekenreeks terug.

_strTitleCase

Zet een tekenreeks om naar titelnotatie.

_strToTime

Parseert vrijwel elke Engelstalige tekstuele datum-/tijdbeschrijving naar een Unix-tijdstempel.

_strTrim

Verwijdert witruimte (of andere tekens) van het begin en einde van een tekenreeks.

_strUpperCase

Zet een tekenreeks om naar hoofdletters.

_strWordCount

Aantal woorden in de tekenreeks.

_time

Geeft de huidige tijd terug.

Functiedirectives

Hieronder vind je de lijst met functiedirectives.

@arrayAddItem

Voegt een element toe aan de array.

@arrayDiff

Berekent het verschil met een andere array.

@arrayFilter

Filtert de null- of lege elementen uit de array.

@arrayMerge

Voegt de array samen met een andere array.

@arrayPad

Vult een array aan tot de opgegeven lengte met een waarde.

@arrayRemoveFirst

Verwijdert het eerste element uit de array.

@arrayRemoveLast

Verwijdert het laatste element uit de array.

@arrayReverse

Keert een array om.

@arraySetItem

Stelt een element in op een bepaalde positie in de array.

@arraySlice

Extraheert een deel van een array.

@arraySplice

Verwijdert een deel van een array en vervangt het door iets anders.

@arrayUnique

Filtert alle dubbele elementen uit de array.

@boolOpposite

Zet een booleaanse waarde om naar de tegengestelde waarde.

@floatDivide

Deelt de veldwaarde door een getal met drijvende komma.

@intAdd

Telt een geheel getal op bij de veldwaarde.

@intMultiply

Vermenigvuldigt een geheel getal met de veldwaarde.

@intSubtract

Trekt een geheel getal af van de veldwaarde.

@objectAddEntry

Voegt een item toe aan het JSON-object.

@objectFilter

Filtert de null- of lege elementen uit een object.

@objectKeepProperties

Behoudt alleen specifieke eigenschappen uit het JSON-object.

@objectRemoveEntry

Verwijdert een item uit het JSON-object.

@objectRemoveProperties

Verwijdert specifieke eigenschappen uit het JSON-object.

@setNull

Stelt de veldwaarde in als null.

@strAppend

Voegt een tekenreeks toe aan het einde van de tekenreeks in de veldwaarde.

@strLowerCase

Zet een tekenreeks om naar kleine letters.

@strPad

Vult een tekenreeks aan tot een bepaalde lengte met een andere tekenreeks.

@strPrepend

Voegt een tekenreeks toe aan het begin van de tekenreeks in de veldwaarde.

@strRegexReplace

Voert een reguliere expressie uit om een tekenreeks te zoeken en te vervangen (zie documentatie voor PHP-functie preg_replace).

@strRegexReplaceMultiple

Voert reguliere expressies uit om een lijst tekenreeksen te zoeken en te vervangen (zie documentatie voor PHP-functie preg_replace).

@strRepeat

Herhaalt een tekenreeks.

@strReplace

Vervangt een tekenreeks door een andere tekenreeks.

@strReplaceMultiple

Vervangt een lijst tekenreeksen door een andere lijst tekenreeksen.

@strReverse

Keert een tekenreeks om.

@strShuffle

Schudt een tekenreeks willekeurig door elkaar.

@strStripSlashes

Geeft een tekenreeks terug waaruit backslashes zijn verwijderd. (\' wordt ' enzovoort.) Dubbele backslashes (\\) worden omgezet naar een enkele backslash.

@strSubstr

Geeft een deel van een tekenreeks terug.

@strTitleCase

Zet een tekenreeks om naar titelnotatie.

@strTrim

Verwijdert witruimte (of andere tekens) van het begin en einde van een tekenreeks.

@strUpperCase

Zet een tekenreeks om naar hoofdletters.

Voorbeelden

Functievelden

Hoewel we een veld Post.hasComments hebben, kan de tegengestelde waarde nodig zijn. In plaats van een nieuw veld Post.notHasComments te maken (waarvoor we PHP-code zouden moeten bewerken), kunnen we de functie Field to Input gebruiken om de waarde van hasComments als invoer te geven aan een not-veld, zodat de nieuwe waarde altijd binnen de GraphQL-query wordt berekend:

{
  posts {
    id
    hasComments
    notHasComments: _not(value: $__hasComments)
  }
}

We kunnen functievelden meerdere keren toepassen om een complexere berekening uit te voeren, zoals het genereren van een summary-veld op basis van waarden uit andere velden:

{
  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 combinatie met de extensie HTTP Client kunnen we dynamisch een API-eindpunt genereren om verbinding mee te maken (op basis van de gegevens op onze site), en vervolgens een specifiek veld extraheren uit de teruggegeven gegevens:

{
  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"
      }
    )
  }
}

...wat het volgende oplevert:

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

Functiedirectives

Als deze query:

query {
  posts {
    title
  }
}

...deze resultaten oplevert:

{
  "data": {
    "posts": [
      {
        "title": "Hello world!"
      },
      {
        "title": "lovely weather"
      }
    ]
  }
}

...dan levert deze query:

query {
  posts {
    title @strUpperCase
  }
}

...het volgende op:

{
  "data": {
    "posts": [
      {
        "title": "HELLO WORLD!"
      },
      {
        "title": "LOVELY WEATHER"
      }
    ]
  }
}