Funzioni PHP tramite lo Schema
Questa estensione aggiunge campi e direttive allo schema GraphQL che espongono funzionalità comunemente presenti nei linguaggi di programmazione (come PHP).
Descrizione
I campi e le direttive di funzione sono utili per manipolare i dati una volta che sono stati recuperati, permettendoci di trasformare il valore di un campo nel modo desiderato e fornendoci potenti capacità di importazione/esportazione dei dati.
Questa query, che contiene una varietà di campi e direttive di funzione:
{
_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"]
)
}...produce:
{
"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"
}
}
}Campi di Funzione
I campi di funzione sono Campi Globali, quindi vengono aggiunti a ogni singolo tipo nello schema GraphQL: in QueryRoot, ma anche in Post, User, ecc.
Questa è la lista dei campi di funzione.
_and
Restituisce un'operazione AND tra diverse proprietà booleane.
_arrayAddItem
Aggiunge un elemento all'array.
_arrayCombine
Crea un oggetto JSON utilizzando gli elementi di un array come chiavi e gli elementi di un altro array come valori.
_arrayChunk
Suddivide un array in blocchi.
_arrayDiff
Restituisce un array contenente tutti gli elementi del primo array che non sono presenti in nessuno degli altri array.
_arrayEncodeAsJSONString
Codifica un array in JSON come stringa.
_arrayFill
Crea un array riempito di valori.
_arrayFilter
Filtra gli elementi nulli o vuoti dell'array.
_arrayFlipToObject
Scambia tutte le chiavi numeriche con i loro valori associati in un array, restituendo un oggetto.
_arrayInnerJoinJSONObjectProperties
Riempie gli oggetti JSON all'interno di un array di destinazione con le proprietà di un oggetto JSON di un array di origine, dove una certa proprietà è la stessa per entrambi gli oggetti.
_arrayItem
Accede all'elemento nella posizione indicata dell'array.
_arrayJoin
Unisce tutte le stringhe di un array, utilizzando un separatore fornito.
_arrayKeys
Chiavi di un array.
_arrayLength
Numero di elementi in un array.
_arrayMerge
Unisce due o più array insieme.
_arrayPad
Riempie un array fino alla lunghezza specificata con un valore.
_arrayRandom
Seleziona casualmente un elemento tra quelli forniti.
_arrayRemoveFirst
Rimuove il primo elemento dell'array.
_arrayRemoveLast
Rimuove l'ultimo elemento dell'array.
_arrayReverse
Inverte un array.
_arraySearch
Cerca in quale posizione si trova un elemento nell'array. Se trovato, restituisce la sua posizione, altrimenti restituisce false.
_arraySetItem
Imposta un elemento in una determinata posizione dell'array.
_arraySlice
Estrae una porzione di un array.
_arraySplice
Rimuove una parte di un array e la sostituisce con qualcos'altro.
_arrayUnique
Filtra tutti gli elementi duplicati dell'array.
_date
Restituisce una stringa formattata secondo la stringa di formato indicata utilizzando il timestamp intero indicato (timestamp Unix) o l'ora corrente se non viene fornito alcun timestamp. In altre parole, timestamp è opzionale e per impostazione predefinita assume il valore di time() (fornito tramite il campo _time).
_echo
Ripete l'input così com'è, qualunque esso sia.
_equals
Indica se il risultato di un campo è uguale a un certo valore.
_floatCeil
Arrotonda un numero all'intero superiore più vicino.
_floatDivide
Divide un numero per un altro numero.
_greaterThan
Indica se numero1 > numero2.
_greaterThanOrEquals
Indica se numero1 >= numero2.
_if
Se una proprietà booleana è vera, esegue un campo, altrimenti esegue un altro campo.
_inArray
Indica se l'array contiene il valore.
_intAdd
Aggiunge un intero a un altro intero.
_intArraySum
Somma degli elementi interi dell'array.
_intMultiply
Moltiplica un intero per un altro intero.
_intSubtract
Sottrae un intero da un altro intero.
_isEmpty
Indica se un valore è vuoto.
_isNull
Indica se un valore è nullo.
_lowerThan
Indica se numero1 < numero2.
_lowerThanOrEquals
Indica se numero1 <= numero2.
_makeTime
Restituisce il timestamp Unix corrispondente agli argomenti forniti. Questo timestamp è un intero lungo contenente il numero di secondi tra l'Epoca Unix (1 gennaio 1970 00:00:00 GMT) e l'ora specificata.
Qualsiasi argomento opzionale omesso o nullo verrà impostato al valore corrente secondo la data e l'ora locali.
_not
Restituisce il valore opposto di una proprietà booleana.
_notEmpty
Indica se il valore non è vuoto.
_notEquals
Indica se i due valori non sono uguali tra loro.
_notInArray
Indica se l'array non contiene il valore.
_notNull
Indica se il valore non è null.
_objectAddEntry
Aggiunge una voce all'oggetto.
_objectEncodeAsJSONString
Codifica un oggetto in JSON come stringa.
_objectFilter
Filtra gli elementi nulli o vuoti dell'oggetto.
_objectFlip
Inverte le chiavi e i valori di un oggetto JSON.
_objectIntersectKey
Calcola l'intersezione di oggetti utilizzando le chiavi per il confronto.
_objectKeepProperties
Mantiene solo proprietà specifiche nell'oggetto JSON.
_objectMerge
Unisce due o più oggetti insieme.
_objectProperties
Recupera le proprietà di un oggetto JSON.
_objectProperty
Recupera una proprietà da un oggetto JSON.
_objectRemoveEntry
Rimuove una voce dall'oggetto JSON.
_objectRemoveProperties
Rimuove una o più voci dall'oggetto JSON.
_objectValues
Recupera i valori di un oggetto JSON.
_or
Restituisce un'operazione OR tra diverse proprietà booleane.
_propertyExistsInJSONObject
Indica se una proprietà esiste in un oggetto JSON.
_propertyIsSetInJSONObject
Indica se una proprietà esiste e non è null in un oggetto JSON.
_sprintf
Sostituisce i segnaposto all'interno di una stringa con i valori forniti.
_strAppend
Aggiunge una stringa a un'altra stringa.
_strArrayReplace
Sostituisce una stringa con un'altra stringa in un array.
_strArrayReplaceMultiple
Sostituisce una lista di stringhe con un'altra lista di stringhe in un array.
_strContains
Indica se una stringa contiene un'altra stringa.
_strDecodeJSONObject
Decodifica una stringa in un oggetto JSON, oppure restituisce null se non è possibile.
_strDecodeList
Decodifica una stringa in un array (di qualsiasi tipo), oppure restituisce null se non è possibile.
_strEndsWith
Indica se una stringa termina con un'altra stringa.
_strLength
Lunghezza della stringa.
_strLowerCase
Trasforma una stringa in minuscolo.
_strPad
Riempie una stringa fino a una certa lunghezza con un'altra stringa.
_strPos
Posizione di una sottostringa all'interno della stringa, oppure null se non trovata.
_strRegexFindMatches
Esegue un'espressione regolare per estrarre tutte le corrispondenze da una stringa.
_strRegexReplace
Esegue un'espressione regolare per cercare e sostituire una stringa.
_strRegexReplaceMultiple
Esegue espressioni regolari per cercare e sostituire stringhe.
_strRepeat
Ripete una stringa.
_strReplace
Sostituisce una stringa con un'altra stringa.
_strReplaceMultiple
Sostituisce una lista di stringhe con un'altra lista di stringhe.
_strReverse
Inverte una stringa.
_strShuffle
Mescola casualmente una stringa.
_strStartsWith
Indica se una stringa inizia con un'altra stringa.
_strStripSlashes
Restituisce una stringa con le barre rovesciate rimosse. (\' diventa ' e così via.) Le doppie barre rovesciate (\\) vengono trasformate in una singola barra rovesciata (\).
_strSubstr
Restituisce una parte di una stringa.
_strTitleCase
Trasforma una stringa in maiuscolo per le iniziali (title case).
_strToTime
Analizza quasi qualsiasi descrizione testuale di data e ora in inglese trasformandola in un timestamp Unix.
_strTrim
Rimuove gli spazi bianchi (o altri caratteri) dall'inizio e dalla fine di una stringa.
_strUpperCase
Trasforma una stringa in maiuscolo.
_strWordCount
Numero di parole nella stringa.
_time
Restituisce l'ora attuale.
Direttive di Funzione
Questa è la lista delle direttive di funzione.
@arrayAddItem
Aggiunge un elemento all'array.
@arrayDiff
Calcola la differenza con un altro array.
@arrayFilter
Filtra gli elementi nulli o vuoti dell'array.
@arrayMerge
Unisce l'array con un altro array.
@arrayPad
Riempie un array fino alla lunghezza specificata con un valore.
@arrayRemoveFirst
Rimuove il primo elemento dell'array.
@arrayRemoveLast
Rimuove l'ultimo elemento dell'array.
@arrayReverse
Inverte un array.
@arraySetItem
Imposta un elemento in una determinata posizione dell'array.
@arraySlice
Estrae una porzione di un array.
@arraySplice
Rimuove una parte di un array e la sostituisce con qualcos'altro.
@arrayUnique
Filtra tutti gli elementi duplicati dell'array.
@boolOpposite
Converte un booleano nel suo valore opposto.
@floatDivide
Divide il valore del campo per un numero a virgola mobile.
@intAdd
Aggiunge un intero al valore del campo.
@intMultiply
Moltiplica un intero per il valore del campo.
@intSubtract
Sottrae un intero dal valore del campo.
@objectAddEntry
Aggiunge una voce all'oggetto JSON.
@objectFilter
Filtra gli elementi nulli o vuoti di un oggetto.
@objectKeepProperties
Mantiene solo proprietà specifiche dall'oggetto JSON.
@objectRemoveEntry
Rimuove una voce dall'oggetto JSON.
@objectRemoveProperties
Rimuove proprietà specifiche dall'oggetto JSON.
@setNull
Imposta il valore del campo come null.
@strAppend
Aggiunge una stringa alla fine della stringa nel valore del campo.
@strLowerCase
Converte una stringa in minuscolo.
@strPad
Riempie una stringa fino a una certa lunghezza con un'altra stringa.
@strPrepend
Aggiunge una stringa all'inizio della stringa nel valore del campo.
@strRegexReplace
Esegue un'espressione regolare per cercare e sostituire una stringa (vedi documentazione della funzione PHP preg_replace).
@strRegexReplaceMultiple
Esegue espressioni regolari per cercare e sostituire una lista di stringhe (vedi documentazione della funzione PHP preg_replace).
@strRepeat
Ripete una stringa.
@strReplace
Sostituisce una stringa con un'altra stringa.
@strReplaceMultiple
Sostituisce una lista di stringhe con un'altra lista di stringhe.
@strReverse
Inverte una stringa.
@strShuffle
Mescola casualmente una stringa.
@strStripSlashes
Restituisce una stringa con le barre rovesciate rimosse. (\' diventa ' e così via.) Le doppie barre rovesciate (\\) vengono trasformate in una singola barra rovesciata.
@strSubstr
Restituisce una parte di una stringa.
@strTitleCase
Converte una stringa in maiuscolo per le iniziali (title case).
@strTrim
Rimuove gli spazi bianchi (o altri caratteri) dall'inizio e dalla fine di una stringa.
@strUpperCase
Converte una stringa in maiuscolo.
Esempi
Campi di Funzione
Sebbene disponiamo di un campo Post.hasComments, potremmo avere bisogno del valore opposto. Invece di creare un nuovo campo Post.notHasComments (per il quale dovremmo modificare il codice PHP), possiamo utilizzare la funzionalità Field to Input per passare il valore di hasComments in ingresso a un campo not, calcolando così il nuovo valore sempre all'interno della query GraphQL:
{
posts {
id
hasComments
notHasComments: _not(value: $__hasComments)
}
}Possiamo applicare i campi di funzione più volte per eseguire un calcolo più complesso, come generare un campo summary basato sui valori di altri campi:
{
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 combinazione con l'estensione HTTP Client, possiamo generare dinamicamente un endpoint API a cui connetterci (basato sui dati del nostro sito), e quindi estrarre un campo specifico dai dati restituiti:
{
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"
}
)
}
}...producendo:
{
"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"
}
]
}
}Direttive di Funzione
Se questa query:
query {
posts {
title
}
}...produce questi risultati:
{
"data": {
"posts": [
{
"title": "Hello world!"
},
{
"title": "lovely weather"
}
]
}
}...allora questa query:
query {
posts {
title @strUpperCase
}
}...produrrà:
{
"data": {
"posts": [
{
"title": "HELLO WORLD!"
},
{
"title": "LOVELY WEATHER"
}
]
}
}