類型
驗證值是否為特定的資料類型。例如,如果變數應該是陣列,您可以搭配 array
類型選項使用此約束條件來驗證。
適用於 | 屬性或方法 |
類別 | 類型 |
驗證器 | TypeValidator |
基本用法
此約束條件應適用於未輸入類型的變數/屬性。如果屬性或變數已輸入類型,且您傳遞不同類型的值,PHP 將在檢查此約束條件之前擲出例外。
以下範例檢查 emailAddress
是否為 Symfony\Component\Mime\Address
的實例,firstName
是否為 string
類型(使用 is_string PHP 函數),age
是否為 integer
(使用 is_int PHP 函數),以及 accessCode
是否僅包含字母或僅包含數字(使用 ctype_alpha 和 ctype_digit PHP 函數)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
// src/Entity/Author.php
namespace App\Entity;
use Symfony\Component\Mime\Address;
use Symfony\Component\Validator\Constraints as Assert;
class Author
{
#[Assert\Type(Address::class)]
protected $emailAddress;
#[Assert\Type('string')]
protected $firstName;
#[Assert\Type(
type: 'integer',
message: 'The value {{ value }} is not a valid {{ type }}.',
)]
protected $age;
#[Assert\Type(type: ['alpha', 'digit'])]
protected $accessCode;
}
注意
與大多數其他約束條件一樣,null
被視為有效值。這是為了允許使用選填值。如果值是必填的,常見的解決方案是將此約束條件與 NotNull 結合使用。
選項
訊息 (message)
類型:string
預設值:此值應為 {{ type }} 類型。
當底層資料不是給定類型時顯示的訊息。
您可以在此訊息中使用以下參數
參數 | 描述 |
---|---|
{{ type }} |
預期的類型 |
{{ value }} |
當前(無效)值 |
{{ label }} |
對應的表單欄位標籤 |
酬載 (payload)
類型:mixed
預設值:null
此選項可用於將任意特定領域的資料附加到約束條件。Validator 元件不使用配置的酬載,但其處理完全取決於您。
例如,您可能想要使用多個錯誤層級,以便根據錯誤的嚴重性,在前端以不同的方式呈現失敗的約束條件。
類型 (type)
類型:string
或 array
[預設選項]
此必要選項定義給定值允許的類型或類型集合。每個類型可以是某些 PHP 類別/介面的 FQCN(完全限定類別名稱),或是有效的 PHP 資料類型(由 PHP 的 is_()
函數檢查)
- 布林值 (bool)
- 布林 (boolean)
- 整數 (int)
- 整數 (integer)
- 長整數 (long)
- 浮點數 (float)
- 雙精度浮點數 (double)
- 實數 (real)
- 數值 (numeric)
- 字串 (string)
- 純量 (scalar)
- 陣列 (array)
- 可迭代 (iterable)
- 可計數 (countable)
- 可呼叫 (callable)
- 物件 (object)
- 資源 (resource)
- 空值 (null)
如果您正在處理陣列,您可以在約束條件中使用以下類型
list
,它在內部使用 array_is_listassociative_array
,對於任何非空且非列表的陣列為真
此外,您可以使用對應的 內建 PHP 擴充功能中的 ctype_*()
函數。請參閱 ctype 函數列表
- 文數字 (alnum)
- 字母 (alpha)
- 控制字元 (cntrl)
- 數字 (digit)
- 圖形字元 (graph)
- 小寫字母 (lower)
- 可列印字元 (print)
- 標點符號 (punct)
- 空白字元 (space)
- 大寫字母 (upper)
- 十六進位數字 (xdigit)
請確保在使用其中一個之前已設定正確的 locale。
7.1
list
和 associative_array
類型是在 Symfony 7.1 中引入的。
最後,您可以使用聚合函數
number
:is_int || is_float && !is_nan
finite-float
:is_float && is_finite
finite-number
:is_int || is_float && is_finite