web-dev-qa-db-ja.com

Yii2:配列の検証ルール?

このような単一の整数のルールを定義できます。

[['x'], 'integer']

Xが整数配列であることを伝えることは可能ですか?例えば:

[['x'], 'integer[]']

そして、配列に有効な値を指定できますか?

Update:Yiiバージョン2.0.4からヘルプがあります。参照 この答え

22
robsch

バージョン2.0.4から、新しい EachValidator が追加され、より簡単になりました。

['x', 'each', 'rule' => ['integer']],

これで十分です。値もチェックする必要がある場合は、これを使用できます(実際にはRangeValidatorである 'in' validator を使用)。

['x', 'each', 'rule' => ['in', 'range' => [2, 4, 6, 8]]], // each value in x can only be 2, 4, 6 or 8

ただし、この「in」バリデーターを直接使用することもできます。そして、それはYii 2.0.4より前のバージョンで可能です:

['x', 'in', 'range' => [2, 4, 6, 8], 'allowArray' => true]

の用法 'strict' => trueは、データがクライアントによって送信され、 Model-> load() で設定されている場合、おそらく意味がありません。よくわかりませんが、これらの値はすべて文字列(5ではなく「5」など)として送信されると思います。

52
robsch

以下のようなカスタム検証ルールを作成する必要がある場合があります。

['x','checkIsArray']

次に、モデルでimpelement checkIsArray

public function checkIsArray(){
     if(!is_array($this->x)){
         $this->addError('x','X is not array!');
     }
}

必要なすべてをカスタム検証ルールに組み込むことができます。


emteがコメントで述べたように、以下のような匿名関数でインラインバリデータを使用することもできます。

['x',function ($attribute, $params) {
    if(!is_array($this->x)){
         $this->addError('x','X is not array!');
     }
}]
15

各配列要素の特定の範囲に対して確認する必要がある場合

['x', 'required'] 

プラス

['x', 'each', 'rule' => ['in',  'allowArray' => true, 'range' => [2, 4, 6, 8]]]

または

['x', 'in', 'allowArray' => true,  'range' => [2, 4, 6, 8] ]  
3
Ekonoval