Stasgar
@Stasgar
Обученная макака

Yii2: как работает unique в валидации на сервере?

Утрирую для удобства.

Вот допустим у меня есть модель Users.php, в ней нет ничего интересного, просто модель, наследует AR, соответствует простой таблице с пользователями: id, userName, userPassword.

Есть вторая модель - Signup.php - соответственно используется для регистрации нового пользователя. В ней есть метод:
public function rules()
  {
    return [
        [['userName','userPassword'],'required'],
        ['userName','unique','targetClass'=>'app\models\Users'],
    ];
  }


И метод для непосредственного внесения проверенных данных в БД через модель Users:
public function signup()
  {
    $user = new Users;
    $user->userName = $this->userName;
    $user->userPassword = $this->userPassword;
    return $user->save();
  }


В контроллере такого рода код:
public function actionSignup()
    {
        $model = new Signup();
        if( \Yii::$app->request->post('Signup') )
        {
            $model->attributes = \Yii::$app->request->post('Signup');

            if($model->validate() && $model->signup())
            {
                return $this->goHome();
            }
        }
        return $this->render('signup',['model'=>$model]);
    }


В представлении элементарная форма.

Вопрос: Каким образом происходит проверка уникальности? В официальной документации тупо перед фактом ставят - проверяет и всё.
  • Вопрос задан
  • 914 просмотров
Решения вопроса 2
@holfza
Делается дополнительный запрос к БД, это же очевидно. Можете в дебаг панельке посмотреть.
P.S. В вашем коде 2 раза выполняется валидация, правильнее наверное будет так:
return $user->save(false);
Ответ написан
Комментировать
bagiroff777
@bagiroff777
Веб-разработчик
Каждый валидатор - это отдельный класс. Например, "unique" лежит по адресу @vendor/yiisoft/yii2/validators/UniqueValidator.php. Там достаточно комментариев в коде, чтобы понять, что и как происходит.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы