Şema Fonksiyonları
Şema FonksiyonlarıŞema Üzerinden PHP Fonksiyonları

Şema Üzerinden PHP Fonksiyonları

Included in the “Power Extensions” bundle

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