PHP Functions via Schema
Ekstensi ini menambahkan field dan direktif ke skema GraphQL yang mengekspos fungsionalitas yang umum ditemukan dalam bahasa pemrograman (seperti PHP).
Deskripsi
Field dan direktif fungsi berguna untuk memanipulasi data setelah diambil, memungkinkan kita mengubah nilai field dengan cara apapun yang diperlukan, dan memberikan kemampuan impor/ekspor data yang powerful.
Query ini, yang berisi berbagai field dan direktif fungsi:
{
_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"]
)
}...menghasilkan:
{
"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"
}
}
}Field Fungsi
Field fungsi adalah Global Fields, sehingga ditambahkan ke setiap tipe dalam skema GraphQL: di QueryRoot, tetapi juga di Post, User, dll.
Berikut adalah daftar field fungsi.
_and
Mengembalikan operasi AND di antara beberapa properti boolean.
_arrayAddItem
Menambahkan elemen ke dalam array.
_arrayCombine
Membuat objek JSON menggunakan elemen dari satu array sebagai kunci, dan elemen dari array lain sebagai nilai.
_arrayChunk
Membagi array menjadi beberapa bagian.
_arrayDiff
Mengembalikan array yang berisi semua elemen dari array pertama yang tidak ada di array-array lainnya.
_arrayEncodeAsJSONString
Mengodekan array sebagai string JSON.
_arrayFill
Membuat array yang diisi dengan nilai-nilai.
_arrayFilter
Memfilter elemen null atau kosong dalam array.
_arrayFlipToObject
Menukar semua kunci numerik dengan nilai terkaitnya dalam array, mengembalikan sebuah objek.
_arrayInnerJoinJSONObjectProperties
Mengisi objek-objek JSON di dalam array target dengan properti dari objek JSON di array sumber, di mana properti tertentu sama untuk kedua objek.
_arrayItem
Mengakses elemen pada posisi yang diberikan dalam array.
_arrayJoin
Menggabungkan semua string dalam array, menggunakan pemisah yang disediakan.
_arrayKeys
Kunci-kunci dalam array.
_arrayLength
Jumlah elemen dalam array.
_arrayMerge
Menggabungkan dua atau lebih array bersama.
_arrayPad
Mengisi array hingga panjang yang ditentukan dengan sebuah nilai.
_arrayRandom
Memilih secara acak satu elemen dari elemen-elemen yang disediakan.
_arrayRemoveFirst
Menghapus elemen pertama dalam array.
_arrayRemoveLast
Menghapus elemen terakhir dalam array.
_arrayReverse
Membalikkan urutan array.
_arraySearch
Mencari posisi suatu elemen dalam array. Jika ditemukan, mengembalikan posisinya, jika tidak mengembalikan false.
_arraySetItem
Menetapkan elemen pada posisi tertentu dalam array.
_arraySlice
Mengekstrak irisan dari array.
_arraySplice
Menghapus sebagian array dan menggantinya dengan sesuatu yang lain.
_arrayUnique
Memfilter semua elemen duplikat dalam array.
_date
Mengembalikan string yang diformat sesuai dengan string format yang diberikan menggunakan timestamp integer yang diberikan (Unix timestamp) atau waktu saat ini jika tidak ada timestamp yang diberikan. Dengan kata lain, timestamp bersifat opsional dan defaultnya adalah nilai dari time() (disediakan melalui field _time).
_echo
Mengembalikan input apa adanya, apapun isinya.
_equals
Menunjukkan apakah hasil dari sebuah field sama dengan nilai tertentu.
_floatCeil
Membulatkan angka ke atas ke integer tertinggi berikutnya.
_floatDivide
Membagi suatu angka dengan angka lain.
_greaterThan
Menunjukkan apakah number1 > number2.
_greaterThanOrEquals
Menunjukkan apakah number1 >= number2.
_if
Jika properti boolean bernilai true, jalankan sebuah field, jika tidak, jalankan field lainnya.
_inArray
Menunjukkan apakah array mengandung nilai tersebut.
_intAdd
Menambahkan integer ke integer lain.
_intArraySum
Jumlah elemen integer dalam array.
_intMultiply
Mengalikan integer dengan integer lain.
_intSubtract
Mengurangkan integer dari integer lain.
_isEmpty
Menunjukkan apakah sebuah nilai kosong.
_isNull
Menunjukkan apakah sebuah nilai null.
_lowerThan
Menunjukkan apakah number1 < number2.
_lowerThanOrEquals
Menunjukkan apakah number1 <= number2.
_makeTime
Mengembalikan Unix timestamp yang sesuai dengan argumen yang diberikan. Timestamp ini adalah integer panjang yang berisi jumlah detik antara Unix Epoch (1 Januari 1970 00:00:00 GMT) dan waktu yang ditentukan.
Argumen opsional yang dihilangkan atau null akan diatur ke nilai saat ini sesuai tanggal dan waktu lokal.
_not
Mengembalikan nilai kebalikan dari properti boolean.
_notEmpty
Menunjukkan apakah nilainya tidak kosong.
_notEquals
Menunjukkan apakah kedua nilai tidak sama satu sama lain.
_notInArray
Menunjukkan apakah array tidak mengandung nilai tersebut.
_notNull
Menunjukkan apakah nilainya bukan null.
_objectAddEntry
Menambahkan entri ke dalam objek.
_objectEncodeAsJSONString
Mengodekan objek sebagai string JSON.
_objectFilter
Memfilter elemen null atau kosong dalam objek.
_objectFlip
Menukar kunci dan nilai dalam objek JSON.
_objectIntersectKey
Menghitung irisan objek menggunakan kunci untuk perbandingan.
_objectKeepProperties
Menyimpan hanya properti tertentu dalam objek JSON.
_objectMerge
Menggabungkan dua atau lebih objek bersama.
_objectProperties
Mengambil properti-properti dalam objek JSON.
_objectProperty
Mengambil sebuah properti dari objek JSON.
_objectRemoveEntry
Menghapus entri dari objek JSON.
_objectRemoveProperties
Menghapus satu atau lebih entri dari objek JSON.
_objectValues
Mengambil nilai-nilai dalam objek JSON.
_or
Mengembalikan operasi OR di antara beberapa properti boolean.
_propertyExistsInJSONObject
Menunjukkan apakah sebuah properti ada dalam objek JSON.
_propertyIsSetInJSONObject
Menunjukkan apakah sebuah properti ada dan bukan null dalam objek JSON.
_sprintf
Mengganti placeholder di dalam string dengan nilai yang disediakan.
_strAppend
Menambahkan string ke string lain (di akhir).
_strArrayReplace
Mengganti sebuah string dengan string lain dalam array.
_strArrayReplaceMultiple
Mengganti daftar string dengan daftar string lain dalam array.
_strContains
Menunjukkan apakah sebuah string mengandung string lain.
_strDecodeJSONObject
Mendekode string menjadi objek JSON, atau mengembalikan null jika tidak memungkinkan.
_strDecodeList
Mendekode string menjadi array (dari tipe apapun), atau mengembalikan null jika tidak memungkinkan.
_strEndsWith
Menunjukkan apakah sebuah string diakhiri dengan string lain.
_strLength
Panjang string.
_strLowerCase
Mengubah string menjadi huruf kecil.
_strPad
Mengisi string hingga panjang tertentu dengan string lain.
_strPos
Posisi substring dalam string, atau null jika tidak ditemukan.
_strRegexFindMatches
Menjalankan ekspresi reguler untuk mengekstrak semua kecocokan dari sebuah string.
_strRegexReplace
Menjalankan ekspresi reguler untuk mencari dan mengganti string.
_strRegexReplaceMultiple
Menjalankan ekspresi reguler untuk mencari dan mengganti string-string.
_strRepeat
Mengulang sebuah string.
_strReplace
Mengganti sebuah string dengan string lain.
_strReplaceMultiple
Mengganti daftar string dengan daftar string lain.
_strReverse
Membalikkan string.
_strShuffle
Mengacak string secara acak.
_strStartsWith
Menunjukkan apakah sebuah string dimulai dengan string lain.
_strStripSlashes
Mengembalikan string dengan tanda backslash yang dihapus. (\' menjadi ' dan seterusnya.) Backslash ganda (\\) dijadikan satu backslash (\).
_strSubstr
Mengembalikan sebagian dari string.
_strTitleCase
Mengubah string menjadi format title case.
_strToTime
Mengurai deskripsi datetime tekstual bahasa Inggris menjadi Unix timestamp.
_strTrim
Menghapus spasi (atau karakter lain) dari awal dan akhir string.
_strUpperCase
Mengubah string menjadi huruf kapital.
_strWordCount
Jumlah kata dalam string.
_time
Mengembalikan waktu saat ini.
Direktif Fungsi
Berikut adalah daftar direktif fungsi.
@arrayAddItem
Menambahkan elemen ke dalam array.
@arrayDiff
Menghitung perbedaan dengan array lain.
@arrayFilter
Memfilter elemen null atau kosong dalam array.
@arrayMerge
Menggabungkan array dengan array lain.
@arrayPad
Mengisi array hingga panjang yang ditentukan dengan sebuah nilai.
@arrayRemoveFirst
Menghapus elemen pertama dalam array.
@arrayRemoveLast
Menghapus elemen terakhir dalam array.
@arrayReverse
Membalikkan urutan array.
@arraySetItem
Menetapkan elemen pada posisi tertentu dalam array.
@arraySlice
Mengekstrak irisan dari array.
@arraySplice
Menghapus sebagian array dan menggantinya dengan sesuatu yang lain.
@arrayUnique
Memfilter semua elemen duplikat dalam array.
@boolOpposite
Mengubah bool ke nilai kebalikannya.
@floatDivide
Membagi nilai field dengan angka float.
@intAdd
Menambahkan angka integer ke nilai field.
@intMultiply
Mengalikan angka integer dengan nilai field.
@intSubtract
Mengurangkan angka integer dari nilai field.
@objectAddEntry
Menambahkan entri ke dalam objek JSON.
@objectFilter
Memfilter elemen null atau kosong dalam objek.
@objectKeepProperties
Menyimpan hanya properti tertentu dari objek JSON.
@objectRemoveEntry
Menghapus entri dari objek JSON.
@objectRemoveProperties
Menghapus properti tertentu dari objek JSON.
@setNull
Menetapkan nilai field sebagai null.
@strAppend
Menambahkan string ke akhir string dalam nilai field.
@strLowerCase
Mengubah string menjadi huruf kecil.
@strPad
Mengisi string hingga panjang tertentu dengan string lain.
@strPrepend
Menambahkan string ke awal string dalam nilai field.
@strRegexReplace
Menjalankan ekspresi reguler untuk mencari dan mengganti string (lihat dokumentasi untuk fungsi PHP preg_replace).
@strRegexReplaceMultiple
Menjalankan ekspresi reguler untuk mencari dan mengganti daftar string (lihat dokumentasi untuk fungsi PHP preg_replace).
@strRepeat
Mengulang sebuah string.
@strReplace
Mengganti sebuah string dengan string lain.
@strReplaceMultiple
Mengganti daftar string dengan daftar string lain.
@strReverse
Membalikkan string.
@strShuffle
Mengacak string secara acak.
@strStripSlashes
Mengembalikan string dengan tanda backslash yang dihapus. (\' menjadi ' dan seterusnya.) Backslash ganda (\\) dijadikan satu backslash.
@strSubstr
Mengembalikan sebagian dari string.
@strTitleCase
Mengubah string menjadi format title case.
@strTrim
Menghapus spasi (atau karakter lain) dari awal dan akhir string.
@strUpperCase
Mengubah string menjadi huruf kapital.
Contoh
Field Fungsi
Meskipun kita memiliki field Post.hasComments, kita mungkin memerlukan nilai kebalikannya. Alih-alih membuat field baru Post.notHasComments (yang memerlukan pengeditan kode PHP), kita dapat menggunakan fitur Field to Input untuk memasukkan nilai dari hasComments ke dalam field not, sehingga nilai baru selalu dihitung dalam query GraphQL:
{
posts {
id
hasComments
notHasComments: _not(value: $__hasComments)
}
}Kita dapat menerapkan field fungsi beberapa kali untuk melakukan kalkulasi yang lebih kompleks, seperti menghasilkan field summary berdasarkan nilai dari field-field lain:
{
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
)
}
}Dikombinasikan dengan ekstensi HTTP Client, kita dapat membuat endpoint API secara dinamis untuk terhubung (berdasarkan data di situs kita), lalu mengekstrak field tertentu dari data yang dikembalikan:
{
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"
}
)
}
}...menghasilkan:
{
"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"
}
]
}
}Direktif Fungsi
Jika query ini:
query {
posts {
title
}
}...menghasilkan hasil berikut:
{
"data": {
"posts": [
{
"title": "Hello world!"
},
{
"title": "lovely weather"
}
]
}
}...maka query ini:
query {
posts {
title @strUpperCase
}
}...akan menghasilkan:
{
"data": {
"posts": [
{
"title": "HELLO WORLD!"
},
{
"title": "LOVELY WEATHER"
}
]
}
}