如何转换:
public function rules() {
return [
[['attr1', 'attr2'], 'unique', 'skipOnEmpty' => false, 'skipOnError' => false, targetAttribute' => ['attr1', 'attr2']],
到内联验证器中,或者与内联验证器等效的是什么?非常感谢。
如中所述,无法将Unique验证器作为临时验证器使用https://www.yiiframework.com/doc/guide/2.0/en/input-validation#ad-特殊验证:
Note: Not all validators support this type of validation. An example is the unique core validator which is designed to work with a model only.
你必须自己建造它。
另一种方法可以是将查询封装到try-catch中,假设您在数据库上有一个唯一的键。数据库会对查询进行投诉,您可以发现错误。
在线验证编辑:
这是一个非常特殊的验证器,您不会重复使用,因此,让我们将其作为匿名函数内联编写:
public function rules(){
[['attr1'], function(){
//we know the names of the attribute so we use them here directly instead of pass as a parameter
if(self::find()->where([
'attr1' => $this->attr1,
'attr2' => $this->attr2
])->exists()){
$this->addError('attr1', 'Error message');
$this->addError('attr2', 'Error message');
}
}]
}
注意,我刚刚注册了attr1
的验证。如果同时注册attr2
,则每个属性将出现2个错误。