Şema Üzerinden PHP Fonksiyonları
Bu eklenti, programlama dillerinde (PHP gibi) yaygın olarak bulunan işlevleri ortaya koyan alanlar ve direktifler ekler GraphQL şemasına.
Açıklama
Fonksiyon alanları ve direktifleri, veriler alındıktan sonra düzenlenmesi için kullanışlıdır; bir alanın değerini istenen şekilde dönüştürmemizi ve güçlü veri içe aktarma/dışa aktarma yetenekleri kazandırmamızı sağlar.
Çeşitli fonksiyon alanları ve direktifleri içeren bu query:
{
_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"]
)
}...şunu üretir:
{
"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"
}
}
}Fonksiyon Alanları
Fonksiyon alanları Global Alanlardır; bu nedenle GraphQL şemasındaki her tipe eklenir: QueryRoot'a, aynı zamanda Post, User vb. tiplerine de.
Fonksiyon alanlarının listesi aşağıdadır.
_and
Birden fazla boolean özellik arasında AND işlemi döndürür.
_arrayAddItem
Diziye bir eleman ekler.
_arrayCombine
Bir dizinin elemanlarını anahtar, başka bir dizinin elemanlarını değer olarak kullanarak JSON nesnesi oluşturur.
_arrayChunk
Diziyi parçalara böler.
_arrayDiff
Diğer dizilerin hiçbirinde bulunmayan, ilk dizideki tüm elemanları içeren bir dizi döndürür.
_arrayEncodeAsJSONString
Diziyi JSON olarak bir string'e kodlar.
_arrayFill
Değerlerle doldurulmuş bir dizi oluşturur.
_arrayFilter
Dizideki null veya boş elemanları filtreler.
_arrayFlipToObject
Dizideki tüm sayısal anahtarları ilişkili değerleriyle değiştirerek nesne döndürür.
_arrayInnerJoinJSONObjectProperties
Belirli bir özelliğin her iki nesne için de aynı olduğu durumlarda, bir kaynak dizisindeki JSON nesnesinin özelliklerini hedef dizisindeki JSON nesnelerine doldurur.
_arrayItem
Dizide verilen konumdaki elemana erişir.
_arrayJoin
Dizideki tüm string'leri sağlanan bir ayırıcı kullanarak birleştirir.
_arrayKeys
Dizideki anahtarlar.
_arrayLength
Dizideki eleman sayısı.
_arrayMerge
İki veya daha fazla diziyi birleştirir.
_arrayPad
Diziyi belirtilen uzunluğa kadar bir değerle doldurur.
_arrayRandom
Sağlanan elemanlardan rastgele birini seçer.
_arrayRemoveFirst
Dizideki ilk elemanı kaldırır.
_arrayRemoveLast
Dizideki son elemanı kaldırır.
_arrayReverse
Diziyi tersine çevirir.
_arraySearch
Bir elemanın dizide hangi konumda yer aldığını arar. Bulunursa konumunu, bulunamazsa false döndürür.
_arraySetItem
Dizinin belirli bir konumuna eleman yerleştirir.
_arraySlice
Diziden bir dilim çıkarır.
_arraySplice
Dizinin bir bölümünü kaldırır ve yerine başka bir şey koyar.
_arrayUnique
Dizideki tüm yinelenen elemanları filtreler.
_date
Verilen timestamp tamsayısını (Unix zaman damgası) veya zaman damgası verilmezse geçerli saati kullanarak, verilen format string'ine göre biçimlendirilmiş bir string döndürür. Yani timestamp isteğe bağlıdır ve varsayılan olarak time() değerini alır (alan _time aracılığıyla sağlanır).
_echo
Girdiyi, ne olursa olsun geri döndürür.
_equals
Bir alanın sonucunun belirli bir değere eşit olup olmadığını belirtir.
_floatCeil
Bir sayıyı bir sonraki en yüksek tam sayıya yuvarlar.
_floatDivide
Bir sayıyı başka bir sayıya böler.
_greaterThan
sayı1 > sayı2 olup olmadığını belirtir.
_greaterThanOrEquals
sayı1 >= sayı2 olup olmadığını belirtir.
_if
Boolean bir özellik doğruysa bir alan çalıştırır, aksi takdirde başka bir alan çalıştırır.
_inArray
Dizinin değeri içerip içermediğini belirtir.
_intAdd
Bir tam sayıya başka bir tam sayı ekler.
_intArraySum
Dizideki tam sayı elemanların toplamı.
_intMultiply
Bir tam sayıyı başka bir tam sayıyla çarpar.
_intSubtract
Bir tam sayıdan başka bir tam sayı çıkarır.
_isEmpty
Bir değerin boş olup olmadığını belirtir.
_isNull
Bir değerin null olup olmadığını belirtir.
_lowerThan
sayı1 < sayı2 olup olmadığını belirtir.
_lowerThanOrEquals
sayı1 <= sayı2 olup olmadığını belirtir.
_makeTime
Verilen argümanlara karşılık gelen Unix zaman damgasını döndürür. Bu zaman damgası, Unix Dönemi (1 Ocak 1970 00:00:00 GMT) ile belirtilen saat arasındaki saniye sayısını içeren uzun bir tam sayıdır.
İsteğe bağlı olan ve atlanmış veya null olan argümanlar, yerel tarih ve saate göre geçerli değere ayarlanır.
_not
Boolean bir özelliğin zıt değerini döndürür.
_notEmpty
Değerin boş olmadığını belirtir.
_notEquals
İki değerin birbirine eşit olmadığını belirtir.
_notInArray
Dizinin değeri içermediğini belirtir.
_notNull
Değerin null olmadığını belirtir.
_objectAddEntry
Nesneye bir giriş ekler.
_objectEncodeAsJSONString
Nesneyi JSON olarak bir string'e kodlar.
_objectFilter
Nesnedeki null veya boş elemanları filtreler.
_objectFlip
JSON nesnesindeki anahtar ve değerleri ters çevirir.
_objectIntersectKey
Karşılaştırma için anahtarları kullanarak nesnelerin kesişimini hesaplar.
_objectKeepProperties
JSON nesnesinde yalnızca belirli özellikleri tutar.
_objectMerge
İki veya daha fazla nesneyi birleştirir.
_objectProperties
JSON nesnesindeki özellikleri getirir.
_objectProperty
JSON nesnesinden bir özellik getirir.
_objectRemoveEntry
JSON nesnesinden bir girişi kaldırır.
_objectRemoveProperties
JSON nesnesinden bir veya daha fazla girişi kaldırır.
_objectValues
JSON nesnesindeki değerleri getirir.
_or
Birden fazla boolean özellik arasında OR işlemi döndürür.
_propertyExistsInJSONObject
JSON nesnesinde bir özelliğin var olup olmadığını belirtir.
_propertyIsSetInJSONObject
JSON nesnesinde bir özelliğin var olup olmadığını ve null olmadığını belirtir.
_sprintf
String içindeki yer tutucuları sağlanan değerlerle değiştirir.
_strAppend
Bir string'e başka bir string ekler.
_strArrayReplace
Dizideki bir string'i başka bir string ile değiştirir.
_strArrayReplaceMultiple
Dizideki bir string listesini başka bir string listesiyle değiştirir.
_strContains
Bir string'in başka bir string içerip içermediğini belirtir.
_strDecodeJSONObject
Bir string'i JSON nesnesine dönüştürür; mümkün değilse null döndürür.
_strDecodeList
Bir string'i diziye (herhangi bir türde) dönüştürür; mümkün değilse null döndürür.
_strEndsWith
Bir string'in başka bir string ile bitip bitmediğini belirtir.
_strLength
String'in uzunluğu.
_strLowerCase
String'i küçük harfe dönüştürür.
_strPad
Bir string'i belirli bir uzunluğa kadar başka bir string ile doldurur.
_strPos
String içindeki bir alt string'in konumu; bulunamazsa null döndürür.
_strRegexFindMatches
Bir string'den tüm eşleşmeleri çıkarmak için düzenli ifade çalıştırır.
_strRegexReplace
Bir string'de arama ve değiştirme yapmak için düzenli ifade çalıştırır.
_strRegexReplaceMultiple
String'lerde arama ve değiştirme yapmak için düzenli ifadeler çalıştırır.
_strRepeat
Bir string'i tekrarlar.
_strReplace
Bir string'i başka bir string ile değiştirir.
_strReplaceMultiple
Bir string listesini başka bir string listesiyle değiştirir.
_strReverse
Bir string'i tersine çevirir.
_strShuffle
Bir string'i rastgele karıştırır.
_strStartsWith
Bir string'in başka bir string ile başlayıp başlamadığını belirtir.
_strStripSlashes
Ters eğik çizgiler kaldırılmış bir string döndürür. (\' 'ye dönüşür vb.) Çift ters eğik çizgiler (\\) tek ters eğik çizgiye (\) dönüşür.
_strSubstr
Bir string'in bir bölümünü döndürür.
_strTitleCase
Bir string'i başlık büyük harfine dönüştürür.
_strToTime
Neredeyse her türlü İngilizce metin tarih-saat açıklamasını Unix zaman damgasına dönüştürür.
_strTrim
String'in başından ve sonundan boşlukları (veya diğer karakterleri) kırpar.
_strUpperCase
String'i büyük harfe dönüştürür.
_strWordCount
String'deki kelime sayısı.
_time
Geçerli saati döndürür.
Fonksiyon Direktifleri
Fonksiyon direktiflerinin listesi aşağıdadır.
@arrayAddItem
Diziye bir eleman ekler.
@arrayDiff
Başka bir dizi ile farkı hesaplar.
@arrayFilter
Dizideki null veya boş elemanları filtreler.
@arrayMerge
Diziyi başka bir dizi ile birleştirir.
@arrayPad
Diziyi belirtilen uzunluğa kadar bir değerle doldurur.
@arrayRemoveFirst
Dizideki ilk elemanı kaldırır.
@arrayRemoveLast
Dizideki son elemanı kaldırır.
@arrayReverse
Diziyi tersine çevirir.
@arraySetItem
Dizinin belirli bir konumuna eleman yerleştirir.
@arraySlice
Diziden bir dilim çıkarır.
@arraySplice
Dizinin bir bölümünü kaldırır ve yerine başka bir şey koyar.
@arrayUnique
Dizideki tüm yinelenen elemanları filtreler.
@boolOpposite
Bir boolean değeri zıt değerine dönüştürür.
@floatDivide
Alan değerini bir ondalık sayıya böler.
@intAdd
Alan değerine bir tam sayı ekler.
@intMultiply
Alan değerini bir tam sayı ile çarpar.
@intSubtract
Alan değerinden bir tam sayı çıkarır.
@objectAddEntry
JSON nesnesine bir giriş ekler.
@objectFilter
Nesnedeki null veya boş elemanları filtreler.
@objectKeepProperties
JSON nesnesinden yalnızca belirli özellikleri tutar.
@objectRemoveEntry
JSON nesnesinden bir girişi kaldırır.
@objectRemoveProperties
JSON nesnesinden belirli özellikleri kaldırır.
@setNull
Alanın değerini null olarak ayarlar.
@strAppend
Alan değerindeki string'in sonuna bir string ekler.
@strLowerCase
Bir string'i küçük harfe dönüştürür.
@strPad
Bir string'i belirli bir uzunluğa kadar başka bir string ile doldurur.
@strPrepend
Alan değerindeki string'in başına bir string ekler.
@strRegexReplace
Bir string'de arama ve değiştirme yapmak için düzenli ifade çalıştırır (bkz. PHP fonksiyonu preg_replace belgeleri).
@strRegexReplaceMultiple
Bir string listesinde arama ve değiştirme yapmak için düzenli ifadeler çalıştırır (bkz. PHP fonksiyonu preg_replace belgeleri).
@strRepeat
Bir string'i tekrarlar.
@strReplace
Bir string'i başka bir string ile değiştirir.
@strReplaceMultiple
Bir string listesini başka bir string listesiyle değiştirir.
@strReverse
Bir string'i tersine çevirir.
@strShuffle
Bir string'i rastgele karıştırır.
@strStripSlashes
Ters eğik çizgiler kaldırılmış bir string döndürür. (\' 'ye dönüşür vb.) Çift ters eğik çizgiler (\\) tek ters eğik çizgiye dönüşür.
@strSubstr
Bir string'in bir bölümünü döndürür.
@strTitleCase
Bir string'i başlık büyük harfine dönüştürür.
@strTrim
String'in başından ve sonundan boşlukları (veya diğer karakterleri) kırpar.
@strUpperCase
Bir string'i büyük harfe dönüştürür.
Örnekler
Fonksiyon Alanları
Post.hasComments alanımız olmasına karşın zıt değere ihtiyaç duyabiliriz. Post.notHasComments adında yeni bir alan oluşturmak (bunun için PHP kodu düzenlememiz gerekirdi) yerine, Field to Input özelliğini kullanarak hasComments değerini bir not alanına giriş olarak aktarabilir ve böylece yeni değeri her zaman GraphQL query içinde hesaplayabiliriz:
{
posts {
id
hasComments
notHasComments: _not(value: $__hasComments)
}
}Daha karmaşık bir hesaplama yapmak için fonksiyon alanlarını birden fazla kez uygulayabiliriz; örneğin diğer alanların değerlerine dayalı bir summary alanı oluşturmak gibi:
{
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
)
}
}HTTP Client eklentisiyle birlikte kullanıldığında, sitemizdeki verilere dayalı olarak bağlanılacak bir API uç noktasını dinamik olarak oluşturabilir ve ardından döndürülen verilerden belirli bir alanı çıkarabiliriz:
{
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"
}
)
}
}...şunu üretir:
{
"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"
}
]
}
}Fonksiyon Direktifleri
Bu query:
query {
posts {
title
}
}...şu sonuçları üretiyorsa:
{
"data": {
"posts": [
{
"title": "Hello world!"
},
{
"title": "lovely weather"
}
]
}
}...bu query:
query {
posts {
title @strUpperCase
}
}...şunu üretecektir:
{
"data": {
"posts": [
{
"title": "HELLO WORLD!"
},
{
"title": "LOVELY WEATHER"
}
]
}
}