9 フォロワー

コアバリデーター

Yiiは、主にyii\validators名前空間の下にある、よく使用されるコアバリデーターのセットを提供します。長いバリデータークラス名を使用する代わりに、これらのコアバリデーターの使用を指定するためにエイリアスを使用できます。たとえば、yii\validators\RequiredValidatorクラスを参照するために、エイリアスrequiredを使用できます。

public function rules()
{
    return [
        [['email', 'password'], 'required'],
    ];
}

yii\validators\Validator::$builtInValidatorsプロパティは、サポートされているすべてのバリデーターエイリアスを宣言します。

以下では、すべてのコアバリデーターの主な使用法とプロパティについて説明します。

boolean

[
    // checks if "selected" is either 0 or 1, regardless of data type
    ['selected', 'boolean'],

    // checks if "deleted" is of boolean type, either true or false
    ['deleted', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true],
]

このバリデーターは、入力値がブール値であるかどうかを確認します。

  • trueValue: trueを表す値。デフォルトは'1'です。
  • falseValue: falseを表す値。デフォルトは'0'です。
  • strict: 入力値の型がtrueValuefalseValueの型と一致する必要があるかどうか。デフォルトはfalseです。

注意: HTMLフォーム経由で送信されたデータ入力はすべて文字列であるため、通常はstrictプロパティをfalseのままにする必要があります。

captcha

[
    ['verificationCode', 'captcha'],
]

このバリデーターは通常、yii\captcha\CaptchaActionおよびyii\captcha\Captchaと一緒に使用して、入力がCAPTCHAウィジェットによって表示される検証コードと同じであることを確認します。

  • caseSensitive: 検証コードの比較で大文字と小文字が区別されるかどうか。デフォルトはfalseです。
  • captchaAction: CAPTCHAイメージをレンダリングするCAPTCHAアクションに対応するルート。デフォルトは'site/captcha'です。
  • skipOnEmpty: 入力が空の場合にバリデーションをスキップするかどうか。デフォルトはfalseで、入力が必須であることを意味します。

compare

[
    // validates if the value of "password" attribute equals to that of "password_repeat"
    ['password', 'compare'],

    // same as above but with explicitly specifying the attribute to compare with
    ['password', 'compare', 'compareAttribute' => 'password_repeat'],

    // validates if age is greater than or equal to 30
    ['age', 'compare', 'compareValue' => 30, 'operator' => '>=', 'type' => 'number'],
]

このバリデーターは、指定された入力値を別の値と比較し、それらの関係がoperatorプロパティで指定されたとおりであることを確認します。

  • compareAttribute: 値を比較する属性の名前。バリデーターが属性のバリデーションに使用される場合、このプロパティのデフォルト値は、属性の名前に_repeatを付加したものになります。たとえば、バリデーションされる属性がpasswordの場合、このプロパティはデフォルトでpassword_repeatになります。
  • compareValue: 入力値を比較する定数値(または値を返すクロージャ)。このプロパティとcompareAttributeの両方が指定されている場合、このプロパティが優先されます。
  • operator: 比較演算子。デフォルトは==で、入力値がcompareAttributeまたはcompareValueの値と等しいかどうかを確認することを意味します。以下の演算子がサポートされています。
    • ==: 2つの値が等しいかどうかを確認します。比較は非厳密モードで行われます。
    • ===: 2つの値が等しいかどうかを確認します。比較は厳密モードで行われます。
    • !=: 2つの値が等しくないかどうかを確認します。比較は非厳密モードで行われます。
    • !==: 2つの値が等しくないかどうかを確認します。比較は厳密モードで行われます。
    • >: バリデーション対象の値が、比較対象の値よりも大きいかどうかを確認します。
    • >=: バリデーション対象の値が、比較対象の値以上であるかどうかを確認します。
    • <: バリデーション対象の値が、比較対象の値よりも小さいかどうかを確認します。
    • <=: バリデーション対象の値が、比較対象の値以下であるかどうかを確認します。
  • type: デフォルトの比較タイプは'string'で、これは値がバイト単位で比較されることを意味します。数値を比較する場合は、$typeを'number'に設定して、数値比較を有効にしてください。

日付値の比較

compareバリデーターは、文字列と数値の比較にのみ使用できます。日付のような値を比較する必要がある場合は、2つのオプションがあります。日付を固定値と比較する場合は、dateバリデーターを使用し、その$minまたは$maxプロパティを指定するだけで済みます。フォームに入力された2つの日付(たとえば、fromDateフィールドとtoDateフィールド)を比較する必要がある場合は、次のようにcompareバリデーターとdateバリデーターを組み合わせて使用できます。

['fromDate', 'date', 'timestampAttribute' => 'fromDate'],
['toDate', 'date', 'timestampAttribute' => 'toDate'],
['fromDate', 'compare', 'compareAttribute' => 'toDate', 'operator' => '<', 'enableClientValidation' => false],

バリデーターは指定された順序で実行されるため、まずfromDatetoDateに入力された値が有効な日付値であるかどうかを検証し、そうであれば、それらは機械可読形式に変換されます。その後、これらの2つの値がcompareバリデーターによって比較されます。dateバリデーターは現在クライアント検証を提供しないため、クライアント検証はサーバー側でのみ機能するため、$enableClientValidationもcompareバリデーターでfalseに設定されます。

date

dateバリデーターには、3つの異なるショートカットが付属しています。

[
    [['from_date', 'to_date'], 'date'],
    [['from_datetime', 'to_datetime'], 'datetime'],
    [['some_time'], 'time'],
]

このバリデーターは、入力値が適切な形式の日付、時刻、または日時であるかどうかを確認します。オプションで、入力値をUNIXタイムスタンプまたは他の機械可読形式に変換し、timestampAttributeで指定された属性に格納できます。

  • format: バリデーション対象の値が準拠する必要がある日付/時刻形式。これは、ICUマニュアルで説明されている日付時刻パターンにすることができます。あるいは、PHP Datetimeクラスで認識できる形式を表すphp:プレフィックスが付いた文字列にすることもできます。サポートされている形式については、https://www.php.net/manual/en/datetime.createfromformat.phpを参照してください。これが設定されていない場合は、Yii::$app->formatter->dateFormatの値が使用されます。詳細については、APIドキュメントを参照してください。

  • timestampAttribute: このバリデーターが入力された日付/時刻から変換されたUNIXタイムスタンプを割り当てる属性の名前。これは、バリデーションされている属性と同じ属性にすることができます。その場合、バリデーション後に元の値がタイムスタンプ値で上書きされます。使用例については、"DatePickerを使用した日付入力の処理"を参照してください。

    バージョン2.0.4以降、$timestampAttributeFormat$timestampAttributeTimeZoneを使用して、この属性の形式とタイムゾーンを指定できます。

    timestampAttributeを使用する場合、入力値はUNIXタイムスタンプに変換されますが、これは定義上UTCであるため、入力タイムゾーンからUTCへの変換が実行されることに注意してください(この動作は、2.0.39以降で$defaultTimeZoneを設定することで変更できます)。

  • バージョン2.0.4以降、最小または最大タイムスタンプを指定することもできます。

入力がオプションの場合は、日付バリデーターに加えてデフォルト値フィルターを追加して、空の入力がnullとして保存されるようにすることもできます。そうしないと、データベースに0000-00-00のような日付が表示されたり、日付ピッカーの入力フィールドに1970-01-01が表示されたりする可能性があります。

[
    [['from_date', 'to_date'], 'default', 'value' => null],
    [['from_date', 'to_date'], 'date'],
],

default

[
    // set "age" to be null if it is empty
    ['age', 'default', 'value' => null],

    // set "country" to be "USA" if it is empty
    ['country', 'default', 'value' => 'USA'],

    // assign "from" and "to" with a date 3 days and 6 days from today, if they are empty
    [['from', 'to'], 'default', 'value' => function ($model, $attribute) {
        return date('Y-m-d', strtotime($attribute === 'to' ? '+3 days' : '+6 days'));
    }],
]

このバリデーターはデータを検証しません。代わりに、属性が空の場合、バリデーションされる属性にデフォルト値を割り当てます。

  • value: デフォルト値、または、空の場合にバリデーションされる属性に割り当てられるデフォルト値を返すコールバックとしてのクロージャ。クロージャのシグネチャは次のようになります。
function foo($model, $attribute) {
    // ... compute $value ...
    return $value;
}

情報: 値が空かどうかを判断する方法は、空の値セクションで説明されている別のトピックです。データベーススキーマからのデフォルト値は、モデルのloadDefaultValues()メソッドを介してロードできます。

double

[
    // checks if "salary" is a double number
    ['salary', 'double'],
]

このバリデーターは、入力値がdouble型数値であるかどうかを確認します。これは、numberバリデーターと同等です。

  • max: 値の上限(包括的)。設定されていない場合、バリデーターは上限をチェックしないことを意味します。
  • min: 値の下限(包括的)。設定されていない場合、バリデーターは下限をチェックしないことを意味します。

each

情報: このバリデーターはバージョン2.0.4以降で使用可能です。

[
    // checks if every category ID is an integer
    ['categoryIDs', 'each', 'rule' => ['integer']],
]

このバリデーターは、配列属性でのみ機能します。配列のすべての要素が、指定されたバリデーションルールによって正常にバリデーションできるかどうかを検証します。上記の例では、categoryIDs属性は配列値を取り、各配列要素はintegerバリデーションルールによって検証されます。

  • rule: バリデーションルールを指定する配列。配列の最初の要素は、バリデーターのクラス名またはエイリアスを指定します。配列内の残りの名前と値のペアは、バリデーターオブジェクトを構成するために使用されます。
  • allowMessageFromRule: 埋め込まれたバリデーションルールによって返されるエラーメッセージを使用するかどうか。デフォルトはtrueです。falseの場合、エラーメッセージとしてmessageが使用されます。

注: 属性値が配列でない場合は、バリデーションが失敗したと見なされ、エラーメッセージとしてmessageが返されます。

email

[
    // checks if "email" is a valid email address
    ['email', 'email'],
]

このバリデーターは、入力値が有効なメールアドレスであるかどうかを確認します。

  • allowName: メールアドレスに名前を含めることを許可するかどうか(例: John Smith <john.smith@example.com>)。デフォルトはfalseです。
  • checkDNS: メールアドレスのドメインが存在し、AレコードまたはMXレコードを持っているかどうかを確認するかどうか。このチェックは、メールアドレスが実際には有効であっても、一時的なDNSの問題が原因で失敗する可能性があることに注意してください。デフォルトはfalseです。
  • enableIDN: バリデーションプロセスでIDN(国際化ドメイン名)を考慮に入れる必要があるかどうか。デフォルトはfalseです。IDNバリデーションを使用するには、intl PHP拡張機能をインストールして有効にする必要があり、そうしないと例外がスローされることに注意してください。

exist

[
    // a1 needs to exist in the column represented by the "a1" attribute
    // i.e. a1 = 1, valid if there is value 1 in column "a1"
    ['a1', 'exist'],
    // equivalent of
    ['a1', 'exist', 'targetAttribute' => 'a1'],
    ['a1', 'exist', 'targetAttribute' => ['a1' => 'a1']],

    // a1 needs to exist, but its value will use a2 to check for the existence
    // i.e. a1 = 2, valid if there is value 2 in column "a2"
    ['a1', 'exist', 'targetAttribute' => 'a2'],
    // equivalent of
    ['a1', 'exist', 'targetAttribute' => ['a1' => 'a2']],
    
    // a2 needs to exist, its value will use a2 to check for the existence, a1 will receive error message
    // i.e. a2 = 2, valid if there is value 2 in column "a2"
    ['a1', 'exist', 'targetAttribute' => ['a2']],
    // equivalent of
    ['a1', 'exist', 'targetAttribute' => ['a2' => 'a2']],

    // a1 and a2 need to exist together, and the first attribute without errors will receive error message
    // i.e. a1 = 3, a2 = 4, valid if there is value 3 in column "a1" and value 4 in column "a2"
    [['a1', 'a2'], 'exist', 'targetAttribute' => ['a1', 'a2']],
    // equivalent of
    [['a1', 'a2'], 'exist', 'targetAttribute' => ['a1' => 'a1', 'a2' => 'a2']],

    // a1 and a2 need to exist together, only a1 will receive error message
    // i.e. a1 = 5, a2 = 6, valid if there is value 5 in column "a1" and value 6 in column "a2"
    ['a1', 'exist', 'targetAttribute' => ['a1', 'a2']],
    // equivalent of
    ['a1', 'exist', 'targetAttribute' => ['a1' => 'a1', 'a2' => 'a2']],

    // a1 needs to exist by checking the existence of both a2 and a3 (using a1 value)
    // i.e. a1 = 7, a2 = 8, valid if there is value 7 in column "a3" and value 8 in column "a2"
    ['a1', 'exist', 'targetAttribute' => ['a2', 'a1' => 'a3']],
    // equivalent of
    ['a1', 'exist', 'targetAttribute' => ['a2' => 'a2', 'a1' => 'a3']],

    // a1 needs to exist. If a1 is an array, then every element of it must exist.
    // i.e. a1 = 9, valid if there is value 9 in column "a1"
    //      a1 = [9, 10], valid if there are values 9 and 10 in column "a1"
    ['a1', 'exist', 'allowArray' => true],
    
    // type_id needs to exist in the column "id" in the table defined in ProductType class
    // i.e. type_id = 1, valid if there is value 1 in column "id" of ProductType's table
    ['type_id', 'exist', 'targetClass' => ProductType::class, 'targetAttribute' => ['type_id' => 'id']],    
    
    // the same as the previous, but using already defined relation "type"
    ['type_id', 'exist', 'targetRelation' => 'type'],
]

このバリデーターは、入力値がアクティブレコード属性で表されるテーブル列にあるかどうかを確認します。targetAttributeを使用してアクティブレコード属性を指定し、targetClassを使用して対応するアクティブレコードクラスを指定できます。これらを指定しない場合、バリデーションされる属性とモデルクラスの値が使用されます。

このバリデーターを使用して、単一の列または複数の列に対して検証できます(つまり、複数の属性値の組み合わせが存在する必要があります)。同時にチェックされた複数の列(例の['a1', 'a2']など)で検証が失敗し、skipOnErrortrueに設定されている場合、以前にエラーがなかった最初の属性のみが新しいエラーメッセージを受け取ります。

  • targetClass: バリデーションされる入力値を検索するために使用する必要があるアクティブレコードクラスの名前。設定されていない場合、現在バリデーションされているモデルのクラスが使用されます。
  • targetAttribute: 入力値の存在を検証するために使用する必要があるtargetClassの属性の名前。設定されていない場合、現在バリデーションされている属性の名前が使用されます。配列を使用して、複数の列の存在を同時に検証できます。配列の値は、存在を検証するために使用される属性であり、配列のキーは、値を検証する属性です。キーと値が同じ場合は、値を指定するだけで済みます。
    ModelAを検証対象とし、ModelBをターゲットクラスとして設定した場合、次のtargetAttributeの構成が適用されます。
    • null => ModelAの現在検証されている属性の値は、ModelBの同じ名前の属性の保存された値に対してチェックされます。
    • 'a' => ModelAの現在検証されている属性の値は、ModelBの属性"a"の保存された値に対してチェックされます。
    • ['a'] => ModelAの属性"a"の値は、ModelBの属性"a"の保存された値に対してチェックされます。
    • ['a' => 'a'] => 上記と同じ。
    • ['a', 'b'] => ModelAの属性 "a" の値が、ModelBの属性 "a" の保存された値と照合され、同時にModelAの属性 "b" の値が、ModelBの属性 "b" の保存された値と照合されます。
    • ['a' => 'b'] => ModelAの属性 "a" の値が、ModelBの属性 "b" の保存された値と照合されます。
  • targetRelation: バージョン 2.0.14 以降、便利な属性 targetRelation を使用して、リクエストされたリレーションの仕様を使用して targetClass および targetAttribute 属性をオーバーライドできます。
  • filter: 入力値の存在をチェックするために使用されるDBクエリに適用される追加のフィルター。これは、文字列、追加のクエリ条件を表す配列(クエリ条件の形式については、yii\db\Query::where() を参照)、または function ($query) というシグネチャを持つ匿名関数にすることができます。ここで、$query は、関数内で変更できる Query オブジェクトです。
  • allowArray: 入力値が配列であることを許可するかどうか。デフォルトは false です。このプロパティが true で、入力が配列の場合、配列のすべての要素がターゲット列に存在する必要があります。targetAttribute を配列として設定して複数の列に対して検証する場合は、このプロパティを true に設定できないことに注意してください。

file

[
    // checks if "primaryImage" is an uploaded image file in PNG, JPG or GIF format.
    // the file size must be less than 1MB
    ['primaryImage', 'file', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024*1024],
]

このバリデーターは、入力が有効なアップロードされたファイルであるかどうかをチェックします。

  • extensions: アップロードが許可されるファイル名拡張子のリスト。これは、配列またはスペースまたはカンマで区切られたファイル拡張子名で構成される文字列(例: "gif, jpg")のいずれかです。拡張子名は大文字と小文字を区別しません。デフォルトは null で、すべてのファイル名拡張子が許可されることを意味します。
  • mimeTypes: アップロードが許可されるファイルMIMEタイプのリスト。これは、配列またはスペースまたはカンマで区切られたファイルMIMEタイプで構成される文字列(例: "image/jpeg, image/png")のいずれかです。特殊文字 * を持つワイルドカードマスクを使用して、MIMEタイプのグループを照合できます。たとえば、image/*image/ で始まるすべてのMIMEタイプ(例: image/jpegimage/png)に合格します。MIMEタイプ名は大文字と小文字を区別しません。デフォルトは null で、すべてのMIMEタイプが許可されることを意味します。詳細については、一般的なメディアタイプを参照してください。
  • minSize: アップロードされたファイルに必要な最小バイト数。デフォルトは null で、下限がないことを意味します。
  • maxSize: アップロードされたファイルで許可される最大バイト数。デフォルトは null で、上限がないことを意味します。
  • maxFiles: 指定された属性が保持できるファイルの最大数。デフォルトは1で、入力は単一のアップロードされたファイルである必要があることを意味します。1より大きい場合、入力は最大 maxFiles 個のアップロードされたファイルで構成される配列である必要があります。
  • checkExtensionByMimeType: ファイルのMIMEタイプによってファイル拡張子をチェックするかどうか。MIMEタイプチェックによって生成された拡張子がアップロードされたファイルの拡張子と異なる場合、ファイルは無効と見なされます。デフォルトは true で、このようなチェックを実行することを意味します。

FileValidatoryii\web\UploadedFile と一緒に使用されます。ファイルのアップロードとアップロードされたファイルの検証に関する完全な説明については、ファイルのアップロードセクションを参照してください。

filter

[
    // trim "username" and "email" inputs
    [['username', 'email'], 'filter', 'filter' => 'trim', 'skipOnArray' => true],

    // normalize "phone" input
    ['phone', 'filter', 'filter' => function ($value) {
        // normalize phone input here
        return $value;
    }],
    
    // normalize "phone" using the function "normalizePhone"
    ['phone', 'filter', 'filter' => [$this, 'normalizePhone']],
    
    public function normalizePhone($value) {
        return $value;
    }
]

このバリデーターはデータを検証しません。代わりに、入力値にフィルターを適用し、検証される属性に値を戻します。

  • filter: フィルターを定義するPHPコールバック。これは、グローバル関数名、匿名関数などにすることができます。関数のシグネチャは function ($value) { return $newValue; } である必要があります。このプロパティを設定する必要があります。
  • skipOnArray: 入力値が配列の場合にフィルターをスキップするかどうか。デフォルトは false です。フィルターが配列入力を処理できない場合は、このプロパティを true に設定する必要があることに注意してください。そうしないと、PHPエラーが発生する可能性があります。

ヒント: 入力値をトリミングする場合は、trim バリデーターを直接使用できます。

ヒント: filter コールバックに期待されるシグネチャを持つPHP関数はたくさんあります。たとえば、属性の特定のタイプを確保するために型キャスト(例:intvalboolvalなどを使用)を適用するには、クロージャでラップする必要なく、フィルターの関数名を指定するだけで済みます。

['property', 'filter', 'filter' => 'boolval'],
['property', 'filter', 'filter' => 'intval'],

image

[
    // checks if "primaryImage" is a valid image with proper size
    ['primaryImage', 'image', 'extensions' => 'png, jpg',
        'minWidth' => 100, 'maxWidth' => 1000,
        'minHeight' => 100, 'maxHeight' => 1000,
    ],
]

このバリデーターは、入力値が有効な画像ファイルを表すかどうかをチェックします。これは、file バリデーターから拡張されているため、すべてのプロパティを継承します。さらに、画像検証用に固有の次の追加プロパティをサポートしています。

  • minWidth: 画像の最小幅。デフォルトは null で、下限がないことを意味します。
  • maxWidth: 画像の最大幅。デフォルトは null で、上限がないことを意味します。
  • minHeight: 画像の最小高さ。デフォルトは null で、下限がないことを意味します。
  • maxHeight: 画像の最大高さ。デフォルトは null で、上限がないことを意味します。

ip

[
    // checks if "ip_address" is a valid IPv4 or IPv6 address
    ['ip_address', 'ip'],

    // checks if "ip_address" is a valid IPv6 address or subnet,
    // value will be expanded to full IPv6 notation.
    ['ip_address', 'ip', 'ipv4' => false, 'subnet' => null, 'expandIPv6' => true],

    // checks if "ip_address" is a valid IPv4 or IPv6 address,
    // allows negation character `!` at the beginning
    ['ip_address', 'ip', 'negation' => true],
]

バリデーターは、属性値が有効なIPv4/IPv6アドレスまたはサブネットであるかどうかをチェックします。また、正規化またはIPv6展開が有効になっている場合、属性の値を変更する可能性があります。

バリデーターには、次のような構成オプションがあります。

  • ipv4: 検証する値がIPv4アドレスにできるかどうか。デフォルトは true です。
  • ipv6: 検証する値がIPv6アドレスにできるかどうか。デフォルトは true です。
  • subnet: アドレスが 192.168.10.0/24 のようなCIDRサブネットを持つIPにできるかどうか。

    • true - サブネットが必要で、CIDRのないアドレスは拒否されます
    • false - アドレスにCIDRを含めることはできません
    • null - CIDRはオプションです

    デフォルトは false です。

  • normalize: CIDRプレフィックスのないアドレスに最小長(IPv4の場合は32、IPv6の場合は128)のCIDRプレフィックスを追加するかどうか。subnetfalse でない場合にのみ機能します。例えば

    • 10.0.1.510.0.1.5/32 に正規化されます
    • 2008:db0::12008:db0::1/128 に正規化されます

    デフォルトは false です。

  • negation: 検証アドレスの先頭に否定文字 ! を含めることができるかどうか。デフォルトは false です。
  • expandIPv6: IPv6アドレスを完全な表記形式に展開するかどうか。たとえば、2008:db0::12008:0db0:0000:0000:0000:0000:0000:0001 に展開されます。デフォルトは false です。
  • ranges: 許可または禁止されているIPv4またはIPv6の範囲の配列。

    配列が空の場合、またはオプションが設定されていない場合、すべてのIPアドレスが許可されます。それ以外の場合、最初のマッチが見つかるまでルールが順番にチェックされます。IPアドレスは、どのルールにもマッチしなかった場合、禁止されます。

    例: `php [

       'client_ip', 'ip', 'ranges' => [
           '192.168.10.128'
           '!192.168.10.0/24',
           'any' // allows any other IP addresses
       ]
    

    ] ` この例では、192.168.10.0/24 サブネットを除くすべてのIPv4およびIPv6アドレスに対してアクセスが許可されています。IPv4アドレス 192.168.10.128 は、制限の前にリストされているため、許可されます。

  • networks: ranges で使用できるネットワークエイリアスの配列。配列の形式

    • キー - エイリアス名
    • 値 - 文字列の配列。文字列は、範囲、IPアドレス、または別のエイリアスにすることができます。文字列は ! で否定できます(negation オプションとは独立)。

    デフォルトでは、次のエイリアスが定義されています。

    • *: any
    • any: 0.0.0.0/0, ::/0
    • private: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fd00::/8
    • multicast: 224.0.0.0/4, ff00::/8
    • linklocal: 169.254.0.0/16, fe80::/10
    • localhost: 127.0.0.0/8', ::1
    • documentation: 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24, 2001:db8::/32
    • system: multicast, linklocal, localhost, documentation

情報: このバリデーターはバージョン2.0.7から利用可能です。

in

[
    // checks if "level" is 1, 2 or 3
    ['level', 'in', 'range' => [1, 2, 3]],
]

このバリデーターは、入力値が指定された値のリストの中から見つかるかどうかをチェックします。

  • range: 入力値を検索する必要がある指定された値のリスト。
  • strict: 入力値と指定された値の比較を厳密にするかどうか(型と値の両方が同じである必要があります)。デフォルトは false です。
  • not: 検証結果を反転する必要があるかどうか。デフォルトは false です。このプロパティが true に設定されている場合、バリデーターは入力値が指定された値のリストにないかどうかをチェックします。
  • allowArray: 入力値が配列であることを許可するかどうか。これが true で入力値が配列の場合、配列内のすべての要素が指定された値のリストにある必要があります。そうでない場合は、検証に失敗します。

integer

[
    // checks if "age" is an integer
    ['age', 'integer'],
]

このバリデーターは、入力値が整数であるかどうかをチェックします。

  • max: 値の上限(包括的)。設定されていない場合、バリデーターは上限をチェックしないことを意味します。
  • min: 値の下限(包括的)。設定されていない場合、バリデーターは下限をチェックしないことを意味します。

match

[
    // checks if "username" starts with a letter and contains only word characters
    ['username', 'match', 'pattern' => '/^[a-z]\w*$/i']
]

このバリデーターは、入力値が指定された正規表現に一致するかどうかをチェックします。

  • pattern: 入力値が一致する必要がある正規表現。このプロパティは設定する必要があります。設定されていない場合は、例外がスローされます。
  • not: 検証結果を反転するかどうか。デフォルトは false で、入力値がパターンに一致する場合にのみ検証が成功することを意味します。これが true に設定されている場合、入力値がパターンに一致しない場合にのみ検証が成功したと見なされます。

number

[
    // checks if "salary" is a number
    ['salary', 'number'],
]

このバリデーターは、入力値が数値であるかどうかをチェックします。これは、double バリデーターと同等です。

  • max: 値の上限(包括的)。設定されていない場合、バリデーターは上限をチェックしないことを意味します。
  • min: 値の下限(包括的)。設定されていない場合、バリデーターは下限をチェックしないことを意味します。

required

[
    // checks if both "username" and "password" are not empty
    [['username', 'password'], 'required'],
]

このバリデーターは、入力値が提供されており、空ではないかどうかをチェックします。

  • requiredValue: 入力が保持する必要がある目的の値。設定されていない場合は、入力が空であってはならないことを意味します。
  • strict: 値を検証するときにデータ型をチェックするかどうか。デフォルトは false です。requiredValue が設定されていない場合、このプロパティが true の場合、バリデーターは入力値が厳密に null でないかどうかをチェックします。このプロパティが false の場合、バリデーターは緩いルールを使用して、値が空かどうかを判断します。requiredValue が設定されている場合、入力と requiredValue の比較では、このプロパティが true の場合にデータ型もチェックされます。

情報: 値が空かどうかを判断する方法は、空の値セクションで取り上げられている別のトピックです。

safe

[
    // marks "description" to be a safe attribute
    ['description', 'safe'],
]

このバリデーターはデータの検証を実行しません。代わりに、属性を安全な属性としてマークするために使用されます。

string

[
    // checks if "username" is a string whose length is between 4 and 24
    ['username', 'string', 'length' => [4, 24]],
]

このバリデーターは、入力値が特定の長さを持つ有効な文字列であるかどうかをチェックします。

  • length: 検証対象の入力文字列の長さ制限を指定します。以下のいずれかの形式で指定できます。
    • 整数: 文字列が持つべき正確な長さ。
    • 1つの要素を持つ配列: 入力文字列の最小長 (例: [8])。これは min を上書きします。
    • 2つの要素を持つ配列: 入力文字列の最小長と最大長 (例: [8, 128])。これは minmax の両方を上書きします。
  • min: 入力文字列の最小長。設定されていない場合、最小長の制限がないことを意味します。
  • max: 入力文字列の最大長。設定されていない場合、最大長の制限がないことを意味します。
  • encoding: 検証対象の入力文字列のエンコーディング。設定されていない場合、アプリケーションのcharset値が使用されます。デフォルトは UTF-8 です。

trim

[
    // trims the white spaces surrounding "username" and "email"
    [['username', 'email'], 'trim'],
]

このバリデーターはデータの検証は行いません。その代わり、入力値の前後の空白をトリムします。入力値が配列の場合、このバリデーターによって無視されることに注意してください。

unique

[
    // a1 needs to be unique in the column represented by the "a1" attribute
    // i.e. a1 = 1, valid if there is no value 1 in column "a1"
    ['a1', 'unique'],
    // equivalent of
    ['a1', 'unique', 'targetAttribute' => 'a1'],
    ['a1', 'unique', 'targetAttribute' => ['a1' => 'a1']],

    // a1 needs to be unique, but column a2 will be used to check the uniqueness of the a1 value
    // i.e. a1 = 2, valid if there is no value 2 in column "a2"
    ['a1', 'unique', 'targetAttribute' => 'a2'],
    // equivalent of
    ['a1', 'unique', 'targetAttribute' => ['a1' => 'a2']],

    // a1 and a2 need to be unique together, and the first attribute without errors will receive error message
    // i.e. a1 = 3, a2 = 4, valid if there is no value 3 in column "a1" and at the same time no value 4 in column "a2"
    [['a1', 'a2'], 'unique', 'targetAttribute' => ['a1', 'a2']],
    // equivalent of
    [['a1', 'a2'], 'unique', 'targetAttribute' => ['a1' => 'a1', 'a2' => 'a2']],

    // a1 and a2 need to be unique together, only a1 will receive error message
    ['a1', 'unique', 'targetAttribute' => ['a1', 'a2']],

    // a1 needs to be unique by checking the uniqueness of both a2 and a3 (using a1 value)
    // i.e. a1 = 5, a2 = 6, valid if there is no value 5 in column "a3" and at the same time no value 6 in column "a2"
    ['a1', 'unique', 'targetAttribute' => ['a2', 'a1' => 'a3']],
    
    // type_id needs to be unique in the column "id" in the table defined in ProductType class
    // i.e. type_id = 1, valid if there is no value 1 in column "id" of ProductType's table
    ['type_id', 'unique', 'targetClass' => ProductType::class, 'targetAttribute' => 'id'],    
]

このバリデーターは、入力値がテーブルカラム内で一意であるかどうかをチェックします。これはActive Recordモデルの属性でのみ機能します。単一のカラムまたは複数のカラムに対する検証をサポートします。複数のカラムに対して同時に検証が行われ (例: 例の ['a1', 'a2'])、skipOnErrortrue に設定されている場合、以前にエラーが発生していない最初のアトリビュートのみが新しいエラーメッセージを受け取ります。

  • targetClass: バリデーションされる入力値を検索するために使用する必要があるアクティブレコードクラスの名前。設定されていない場合、現在バリデーションされているモデルのクラスが使用されます。
  • targetAttribute: 入力値の一意性を検証するために使用する必要がある、targetClass のアトリビュートの名前。設定されていない場合は、現在検証中のアトリビュートの名前が使用されます。複数のカラムの一意性を同時に検証するために、配列を使用できます。配列の値は一意性を検証するために使用されるアトリビュートであり、配列のキーは値が検証されるアトリビュートです。キーと値が同じ場合は、値を指定するだけで済みます。
    ModelAを検証対象とし、ModelBをターゲットクラスとして設定した場合、次のtargetAttributeの構成が適用されます。
    • null => ModelAの現在検証されている属性の値は、ModelBの同じ名前の属性の保存された値に対してチェックされます。
    • 'a' => ModelAの現在検証されている属性の値は、ModelBの属性"a"の保存された値に対してチェックされます。
    • ['a'] => ModelAの属性"a"の値は、ModelBの属性"a"の保存された値に対してチェックされます。
    • ['a' => 'a'] => 上記と同じ。
    • ['a', 'b'] => ModelAの属性 "a" の値が、ModelBの属性 "a" の保存された値と照合され、同時にModelAの属性 "b" の値が、ModelBの属性 "b" の保存された値と照合されます。
    • ['a' => 'b'] => ModelAの属性 "a" の値が、ModelBの属性 "b" の保存された値と照合されます。
  • filter: 入力値の一意性をチェックするために使用されるDBクエリに適用される追加のフィルター。これは、文字列、または追加のクエリ条件を表す配列 (クエリ条件の形式については yii\db\Query::where() を参照)、またはシグネチャ function ($query) を持つ匿名関数にすることができます。ここで $query は、関数内で変更できる Query オブジェクトです。

url

[
    // checks if "website" is a valid URL. Prepend "http://" to the "website" attribute
    // if it does not have a URI scheme
    ['website', 'url', 'defaultScheme' => 'http'],
]

このバリデーターは、入力値が有効なURLであるかどうかをチェックします。

  • validSchemes: 有効とみなされるべきURIスキームを指定する配列。デフォルトは ['http', 'https'] であり、httphttpsの両方のURLが有効とみなされることを意味します。
  • defaultScheme: 入力にスキーム部分がない場合に、入力にプリペンドされるデフォルトのURIスキーム。デフォルトは null であり、入力値を変更しないことを意味します。
  • enableIDN: バリデーターがIDN(国際化ドメイン名)を考慮するかどうか。デフォルトは false です。IDN検証を使用するには、intl PHP拡張機能をインストールして有効にする必要があることに注意してください。そうでない場合は、例外がスローされます。

注意: このバリデーターは、URLスキームとホスト部分が正しいことをチェックします。URLの残りの部分をチェックせず、XSSやその他の攻撃から保護するように設計されていません。アプリケーション開発時の脅威防止について詳しくは、セキュリティのベストプラクティスの記事を参照してください。

タイプミスを見つけたり、このページの改善が必要だとお考えですか?
githubで編集 !