このような単一の整数のルールを定義できます。
[['x'], 'integer']
Xが整数配列であることを伝えることは可能ですか?例えば:
[['x'], 'integer[]']
そして、配列に有効な値を指定できますか?
Update:Yiiバージョン2.0.4からヘルプがあります。参照 この答え 。
バージョン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」など)として送信されると思います。
以下のようなカスタム検証ルールを作成する必要がある場合があります。
['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!');
}
}]
各配列要素の特定の範囲に対して確認する必要がある場合
['x', 'required']
プラス
['x', 'each', 'rule' => ['in', 'allowArray' => true, 'range' => [2, 4, 6, 8]]]
または
['x', 'in', 'allowArray' => true, 'range' => [2, 4, 6, 8] ]