2015-09-27 90 views
1

当您使用Yii2的验证规则的模型内,例如:在Yii2验证规则中传递多维数组?

[['foo','bar'], 'integer], 

显然['foo','bar']是一个数组,我知道你可以使用。

但可以做到通过一个多维数组是这样的:

$this->numbers = [1,2,3]; 

[['foo','bar','numbers'], 'integer] 

威尔Yii2接受这一点,并检查正确的数据还是会测试值,因为numbers是一个数组返回一个错误?

+0

也许[这](http://stackoverflow.com/a/30300977/57091)会帮助你,如果你想创建具有一定的允许值验证。你的意思是foo和bar可能只有价值1,2或3? – robsch

+0

或者数字应该是整数数组?是的,如果这些属性是“正常”整数,需要与foo和bar分开定义。 – robsch

+0

@robsch是的,第二个。我已经将他们转移到使用'each'验证器。 – Brett

回答

2

你需要合并阵列工作规则

[ArrayHelper::merge(['foo','bar'], $this->getNumberFields()), 'integer'] 

更新:

使用each规则。见EachValidator

public function rules() 
{ 
    return [ 
     ['numbers', 'each', 'rule' => ['integer']], 
    ] 
} 
+0

什么是$ this-> getNumberFields()'? – Brett

+0

函数在您的模型中返回字段名称数组,如'['dynamicIntegerFieldOne','integerFieldTwo']'。 –

+0

但我只想通过它的属性名称就像我用'foo'&'bar'做的那样。我想我只是检查它是否可以在一条规则内完成,如果没有,我会在第二条规则中使用'each'验证器。 :) – Brett