我有一个用于创建用户的表单,我将通过我们的API之一检查现有的用户名,并制定具有自定义验证功能的规则,并且其工作正常。但是在更新表单时,自定义函数也会运行并显示错误“我的用户名已存在”。
我的规则
public function rules()
{
return [
['username', 'trim'],
['username', 'uniqueUsers'], // Find username already exists
]
}
我的自定义验证功能,
public function uniqueUsers($attributes, $params)
{
$getUser = Yii::$app->params['user']."?username=".$this->username;
$validUsername = BaseModel::getDetails($getUser);
$getUserValue = isset($validUsername['display']) ? $validUsername['display'] : '';
if($getUserValue!='') {
// echo "$attributes/";
$this->addError($attributes, 'Username Already Exists');
}
}
这里是我想要的,我使用了相同的用户名,该功能将无法运行,但是我再次更改,然后需要调用该功能以进行唯一检查。
答案 0 :(得分:3)
您也可以使用
['username', 'unique', 'when' => function($model) {
return $model->isAttributeChanged('username');
}],
或通过@Hakeem Nofal建议
答案 1 :(得分:1)
签出yii2自己的唯一验证器
https://www.yiiframework.com/doc/api/2.0/yii-validators-uniquevalidator
// a1 needs to be unique
['a1', 'unique']
// a1 needs to be unique, but column a2 will be used to check the uniqueness of the a1 value
['a1', 'unique', 'targetAttribute' => 'a2']
// a1 and a2 need to be unique together, and they both will receive error message
[['a1', 'a2'], 'unique', 'targetAttribute' => ['a1', 'a2']]
// a1 and a2 need to be unique together, only a1 will receive error message
['a1', 'unique', 'targetAttribute' => ['a1', 'a2']]
// a1 needs to be unique by checking the uniqueness of both a2 and a3 (using a1 value)
['a1', 'unique', 'targetAttribute' => ['a2', 'a1' => 'a3']]
对于您来说,它可能看起来像
['username', 'unique', 'message' => Yii:t('app','Username Already exists')]
答案 2 :(得分:-1)
您可以通过使用场景来做到这一点;
['username', 'uniqueUsers', 'on'=>'create']
或检查模型是否是新的。
public function uniqueUsers($attributes, $params)
{
if ($this->isNewRecord){
// Your validation controls
}
}