Hàm Schema
Hàm SchemaHàm PHP qua Schema

Hàm PHP qua Schema

Included in the “Power Extensions” bundle

Tiện ích mở rộng này thêm các trường và chỉ thị vào schema GraphQL, giúp hiển thị các chức năng phổ biến trong các ngôn ngữ lập trình (như PHP).

Mô tả

Các trường và chỉ thị hàm hữu ích cho việc thao tác dữ liệu sau khi đã truy xuất, cho phép chúng ta biến đổi giá trị của trường theo bất kỳ cách nào cần thiết, và cung cấp khả năng nhập/xuất dữ liệu mạnh mẽ.

Query này, chứa nhiều trường và chỉ thị hàm khác nhau:

{
  _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"]
    )
}

...tạo ra:

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

Trường Hàm

Trường hàm là Trường Toàn cục, do đó chúng được thêm vào mọi kiểu dữ liệu trong schema GraphQL: trong QueryRoot, nhưng cũng trong Post, User, v.v.

Dưới đây là danh sách các trường hàm.

_and

Trả về phép toán AND giữa nhiều thuộc tính boolean.

_arrayAddItem

Thêm một phần tử vào mảng.

_arrayCombine

Tạo một đối tượng JSON sử dụng các phần tử từ một mảng làm khóa và các phần tử từ mảng khác làm giá trị.

_arrayChunk

Chia mảng thành các khối.

_arrayDiff

Trả về một mảng chứa tất cả các phần tử từ mảng đầu tiên không có mặt trong bất kỳ mảng nào khác.

_arrayEncodeAsJSONString

Mã hóa JSON một mảng thành chuỗi.

_arrayFill

Tạo một mảng được điền đầy giá trị.

_arrayFilter

Lọc bỏ các phần tử null hoặc rỗng trong mảng.

_arrayFlipToObject

Hoán đổi tất cả các khóa số với các giá trị liên kết của chúng trong một mảng, trả về một đối tượng.

_arrayInnerJoinJSONObjectProperties

Điền các đối tượng JSON bên trong mảng đích với các thuộc tính từ một đối tượng JSON trong mảng nguồn, trong đó một thuộc tính nhất định giống nhau cho cả hai đối tượng.

_arrayItem

Truy cập phần tử tại vị trí cho trước trong mảng.

_arrayJoin

Nối tất cả các chuỗi trong mảng bằng dấu phân cách được cung cấp.

_arrayKeys

Các khóa trong mảng.

_arrayLength

Số phần tử trong mảng.

_arrayMerge

Gộp hai hoặc nhiều mảng lại với nhau.

_arrayPad

Đệm mảng đến độ dài được chỉ định bằng một giá trị.

_arrayRandom

Chọn ngẫu nhiên một phần tử từ các phần tử được cung cấp.

_arrayRemoveFirst

Xóa phần tử đầu tiên trong mảng.

_arrayRemoveLast

Xóa phần tử cuối cùng trong mảng.

_arrayReverse

Đảo ngược mảng.

_arraySearch

Tìm kiếm vị trí của một phần tử trong mảng. Nếu tìm thấy, trả về vị trí của nó; ngược lại trả về false.

_arraySetItem

Đặt một phần tử tại vị trí nào đó trong mảng.

_arraySlice

Trích xuất một lát cắt của mảng.

_arraySplice

Xóa một phần của mảng và thay thế bằng thứ khác.

_arrayUnique

Lọc bỏ tất cả các phần tử trùng lặp trong mảng.

_date

Trả về một chuỗi được định dạng theo chuỗi định dạng cho trước, sử dụng số nguyên timestamp (Unix timestamp) hoặc thời gian hiện tại nếu không có timestamp nào được cung cấp. Nói cách khác, timestamp là tùy chọn và mặc định là giá trị của time() (được cung cấp qua trường _time).

_echo

Lặp lại đầu vào, dù là gì đi nữa.

_equals

Cho biết kết quả từ một trường có bằng một giá trị nhất định không.

_floatCeil

Làm tròn lên một số đến số nguyên cao hơn tiếp theo.

_floatDivide

Chia một số cho một số khác.

_greaterThan

Cho biết số1 > số2.

_greaterThanOrEquals

Cho biết số1 >= số2.

_if

Nếu một thuộc tính boolean là đúng, thực thi một trường; ngược lại, thực thi trường khác.

_inArray

Cho biết mảng có chứa giá trị không.

_intAdd

Cộng một số nguyên vào một số nguyên khác.

_intArraySum

Tổng các phần tử nguyên trong mảng.

_intMultiply

Nhân một số nguyên với một số nguyên khác.

_intSubtract

Trừ một số nguyên từ một số nguyên khác.

_isEmpty

Cho biết một giá trị có rỗng không.

_isNull

Cho biết một giá trị có bằng null không.

_lowerThan

Cho biết số1 < số2.

_lowerThanOrEquals

Cho biết số1 <= số2.

_makeTime

Trả về Unix timestamp tương ứng với các đối số được cung cấp. Timestamp này là một số nguyên dài chứa số giây giữa Epoch Unix (1 tháng 1 năm 1970 00:00:00 GMT) và thời gian được chỉ định.

Bất kỳ đối số tùy chọn nào bị bỏ qua hoặc null sẽ được đặt thành giá trị hiện tại theo ngày và giờ địa phương.

_not

Trả về giá trị ngược lại của một thuộc tính boolean.

_notEmpty

Cho biết giá trị có không rỗng không.

_notEquals

Hai giá trị có khác nhau không.

_notInArray

Cho biết mảng có không chứa giá trị không.

_notNull

Cho biết giá trị có khác null không.

_objectAddEntry

Thêm một mục vào đối tượng.

_objectEncodeAsJSONString

Mã hóa JSON một đối tượng thành chuỗi.

_objectFilter

Lọc bỏ các phần tử null hoặc rỗng trong đối tượng.

_objectFlip

Hoán đổi các khóa và giá trị trong một đối tượng JSON.

_objectIntersectKey

Tính giao của các đối tượng sử dụng khóa để so sánh.

_objectKeepProperties

Chỉ giữ lại các thuộc tính cụ thể trong đối tượng JSON.

_objectMerge

Gộp hai hoặc nhiều đối tượng lại với nhau.

_objectProperties

Truy xuất các thuộc tính trong một đối tượng JSON.

_objectProperty

Truy xuất một thuộc tính từ một đối tượng JSON.

_objectRemoveEntry

Xóa một mục khỏi đối tượng JSON.

_objectRemoveProperties

Xóa một hoặc nhiều mục khỏi đối tượng JSON.

_objectValues

Truy xuất các giá trị trong một đối tượng JSON.

_or

Trả về phép toán OR giữa nhiều thuộc tính boolean.

_propertyExistsInJSONObject

Cho biết một thuộc tính có tồn tại trong đối tượng JSON không.

_propertyIsSetInJSONObject

Cho biết một thuộc tính có tồn tại và không phải null trong đối tượng JSON không.

_sprintf

Thay thế các placeholder bên trong một chuỗi bằng các giá trị được cung cấp.

_strAppend

Nối một chuỗi vào cuối chuỗi khác.

_strArrayReplace

Thay thế một chuỗi bằng chuỗi khác trong một mảng.

_strArrayReplaceMultiple

Thay thế danh sách chuỗi bằng danh sách chuỗi khác trong một mảng.

_strContains

Cho biết một chuỗi có chứa chuỗi khác không.

_strDecodeJSONObject

Giải mã một chuỗi thành đối tượng JSON, hoặc trả về null nếu không thể.

_strDecodeList

Giải mã một chuỗi thành mảng (của bất kỳ kiểu nào), hoặc trả về null nếu không thể.

_strEndsWith

Cho biết một chuỗi có kết thúc bằng chuỗi khác không.

_strLength

Độ dài của chuỗi.

_strLowerCase

Chuyển đổi chuỗi sang chữ thường.

_strPad

Đệm chuỗi đến một độ dài nhất định bằng chuỗi khác.

_strPos

Vị trí của một chuỗi con trong chuỗi, hoặc null nếu không tìm thấy.

_strRegexFindMatches

Thực thi biểu thức chính quy để trích xuất tất cả các kết quả khớp từ một chuỗi.

_strRegexReplace

Thực thi biểu thức chính quy để tìm kiếm và thay thế một chuỗi.

_strRegexReplaceMultiple

Thực thi các biểu thức chính quy để tìm kiếm và thay thế các chuỗi.

_strRepeat

Lặp lại một chuỗi.

_strReplace

Thay thế một chuỗi bằng chuỗi khác.

_strReplaceMultiple

Thay thế danh sách chuỗi bằng danh sách chuỗi khác.

_strReverse

Đảo ngược một chuỗi.

_strShuffle

Xáo trộn ngẫu nhiên một chuỗi.

_strStartsWith

Cho biết một chuỗi có bắt đầu bằng chuỗi khác không.

_strStripSlashes

Trả về chuỗi với các dấu gạch chéo ngược bị xóa bỏ. (\' trở thành ' và tương tự.) Dấu gạch chéo ngược đôi (\\) được chuyển thành dấu gạch chéo ngược đơn (\).

_strSubstr

Trả về một phần của chuỗi.

_strTitleCase

Chuyển đổi chuỗi sang dạng viết hoa chữ cái đầu mỗi từ (title case).

_strToTime

Phân tích hầu hết mọi mô tả datetime bằng văn bản tiếng Anh thành Unix timestamp.

_strTrim

Loại bỏ khoảng trắng (hoặc các ký tự khác) từ đầu và cuối chuỗi.

_strUpperCase

Chuyển đổi chuỗi sang chữ hoa.

_strWordCount

Số từ trong chuỗi.

_time

Trả về thời gian hiện tại.

Chỉ thị Hàm

Dưới đây là danh sách các chỉ thị hàm.

@arrayAddItem

Thêm một phần tử vào mảng.

@arrayDiff

Tính hiệu với mảng khác.

@arrayFilter

Lọc bỏ các phần tử null hoặc rỗng trong mảng.

@arrayMerge

Gộp mảng với mảng khác.

@arrayPad

Đệm mảng đến độ dài được chỉ định bằng một giá trị.

@arrayRemoveFirst

Xóa phần tử đầu tiên trong mảng.

@arrayRemoveLast

Xóa phần tử cuối cùng trong mảng.

@arrayReverse

Đảo ngược mảng.

@arraySetItem

Đặt một phần tử tại vị trí nào đó trong mảng.

@arraySlice

Trích xuất một lát cắt của mảng.

@arraySplice

Xóa một phần của mảng và thay thế bằng thứ khác.

@arrayUnique

Lọc bỏ tất cả các phần tử trùng lặp trong mảng.

@boolOpposite

Chuyển đổi một giá trị bool sang giá trị ngược lại.

@floatDivide

Chia giá trị trường cho một số thực.

@intAdd

Cộng một số nguyên vào giá trị trường.

@intMultiply

Nhân một số nguyên với giá trị trường.

@intSubtract

Trừ một số nguyên từ giá trị trường.

@objectAddEntry

Thêm một mục vào đối tượng JSON.

@objectFilter

Lọc bỏ các phần tử null hoặc rỗng trong một đối tượng.

@objectKeepProperties

Chỉ giữ lại các thuộc tính cụ thể từ đối tượng JSON.

@objectRemoveEntry

Xóa một mục khỏi đối tượng JSON.

@objectRemoveProperties

Xóa các thuộc tính cụ thể khỏi đối tượng JSON.

@setNull

Đặt giá trị của trường thành null.

@strAppend

Nối một chuỗi vào cuối chuỗi trong giá trị trường.

@strLowerCase

Chuyển đổi chuỗi sang chữ thường.

@strPad

Đệm chuỗi đến một độ dài nhất định bằng chuỗi khác.

@strPrepend

Nối một chuỗi vào đầu chuỗi trong giá trị trường.

@strRegexReplace

Thực thi biểu thức chính quy để tìm kiếm và thay thế một chuỗi (xem tài liệu về hàm PHP preg_replace).

@strRegexReplaceMultiple

Thực thi các biểu thức chính quy để tìm kiếm và thay thế danh sách chuỗi (xem tài liệu về hàm PHP preg_replace).

@strRepeat

Lặp lại một chuỗi.

@strReplace

Thay thế một chuỗi bằng chuỗi khác.

@strReplaceMultiple

Thay thế danh sách chuỗi bằng danh sách chuỗi khác.

@strReverse

Đảo ngược một chuỗi.

@strShuffle

Xáo trộn ngẫu nhiên một chuỗi.

@strStripSlashes

Trả về chuỗi với các dấu gạch chéo ngược bị xóa bỏ. (\' trở thành ' và tương tự.) Dấu gạch chéo ngược đôi (\\) được chuyển thành dấu gạch chéo ngược đơn.

@strSubstr

Trả về một phần của chuỗi.

@strTitleCase

Chuyển đổi chuỗi sang dạng viết hoa chữ cái đầu mỗi từ (title case).

@strTrim

Loại bỏ khoảng trắng (hoặc các ký tự khác) từ đầu và cuối chuỗi.

@strUpperCase

Chuyển đổi chuỗi sang chữ hoa.

Ví dụ

Trường Hàm

Mặc dù chúng ta có trường Post.hasComments, đôi khi chúng ta cần giá trị ngược lại. Thay vì tạo một trường mới Post.notHasComments (yêu cầu chỉnh sửa mã PHP), chúng ta có thể sử dụng tính năng Field to Input để truyền giá trị từ hasComments vào trường not, từ đó tính toán giá trị mới hoàn toàn trong GraphQL query:

{
  posts {
    id
    hasComments
    notHasComments: _not(value: $__hasComments)
  }
}

Chúng ta có thể áp dụng các trường hàm nhiều lần để thực hiện phép tính phức tạp hơn, chẳng hạn như tạo trường summary dựa trên các giá trị từ các trường khác:

{
  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
    )
  }
}

Kết hợp với tiện ích mở rộng HTTP Client, chúng ta có thể tạo động một endpoint API để kết nối (dựa trên dữ liệu trên trang web của chúng ta), sau đó trích xuất một trường cụ thể từ dữ liệu được trả về:

{
  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"
      }
    )
  }
}

...tạo ra:

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

Chỉ thị Hàm

Nếu query này:

query {
  posts {
    title
  }
}

...tạo ra các kết quả sau:

{
  "data": {
    "posts": [
      {
        "title": "Hello world!"
      },
      {
        "title": "lovely weather"
      }
    ]
  }
}

...thì query này:

query {
  posts {
    title @strUpperCase
  }
}

...sẽ tạo ra:

{
  "data": {
    "posts": [
      {
        "title": "HELLO WORLD!"
      },
      {
        "title": "LOVELY WEATHER"
      }
    ]
  }
}