Schema Functions
Schema FunctionsPHP Functions via Schema

PHP Functions via Schema

Included in the โ€œPower Extensionsโ€ bundle

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