我有一个像这样的模型
class Person extends yii\db\ActiveRecord
{
public $desk_no;
public $mobl_no;
public $faxx_no;
}
我想添加一个验证规则,用英语读取这样的内容
其中一个* _no属性是必需的;我不在乎哪一个。
我如何在yii2中解决这个问题?
答案 0 :(得分:2)
有点黑客但你可以使用条件验证所需的验证器:
public function rules() {
$oneOfUs = ['desk_no', 'mobl_no', 'faxx_no'];
return [
... //Your other rules here
[$oneOfUs, 'required', 'when' => function($model, $attribute) use ($oneOfUs) {
foreach (array_diff($oneOfUs, [$attribute]) as $f) {
return !!($model->$f);
}
return false;
}]
];
}
上面的代码有效,因为如果设置了除当前属性之外的任何属性,条件函数将返回true。这将依次在当前属性上运行required
验证器。
答案 1 :(得分:1)
您可以使用此类验证,例如
['desk_no', 'required', 'when' => function($model) {
return is_null($model->mobl_no)&&is_null($model->faxx_no);
}, message => "One of the *_no attributes is required; I don't care which one." ],
但是如果这个逻辑可以改变,我更喜欢自定义验证器