PHP-functies via Schema
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"
}
]
}
}