Florens
@Florens
Изучаю возможности yii2

Yii2 не проверяет уникальность поля. Как исправить?

Добрый день.
Столкнулся с тем, что yii2 не проверяет методом AJAX уникальность поля.
public function rules() {
		return [
			['name', 'required', 'message' => 'Введите имя пользователя'],
			['name', 'unique', 'targetClass' => 'app\models\User', 'message' => 'Данное имя пользователя уже занято.'],
			['email', 'required', 'message' => 'Введите почтовый адрес'],
			['email', 'unique', 'targetClass' => 'app\models\User', 'message' => 'Данный почтовый адрес уже занят'],
			['email', 'email', 'message' => 'Некорректный формат почты'],
			['password', 'required', 'message' => 'Введите Ваш пароль'],
			['password', 'string', 'length' => [6,18], 'message' => 'Пароль должен содержать от 6 до 18 символов'],
			['verifyCode', 'captcha', 'message' => 'Введите проверочный код'],
		];
	}


В БД имеется уже строка с именем 'Name', если я ввиду в строку формы опять же 'Name', то валидация покажите, что все гуд. А вот когда второй раз проверяю валидацию методом validate(), то уже показывает, что данное имя занято. С чем это связанно?

-----------------
public function actionSignup() {
		$form = new SignupForm;
		
        if($form->load(Yii::$app->request->post())) {
            if($form->validate() && $form->signup()) {
                return $this->goHome();
            }
        }
return $this->render('signup', [
			'
form' => $form,
		]);


Проверка уникальности проходит после нажатия кнопки и в последствии обновления страницы

----------------------------
Изменил в контроллере:
public function actionSignup() {
		$form = new SignupForm;
		
        if(Yii::$app->request->isAjax && $form->load(Yii::$app->request->post())) {
            Yii::$app->response->format = Response::FORMAT_JSON;
            return ActiveForm::validate($form);
        }
        if($form->load(Yii::$app->request->post())) {
            if($form->signup()) {
                return $this->goHome();
            }
        }
		return $this->render('signup', [
			'form' => $form,
		]);
	}

к полям ввода добавил 'enableAjaxValidation' => true,

проблема осталась прежней валидация не выполняет нужную функцию

---------------------------
Выпадает данная ошибка при вводе данных в поле
740c792b8aee43808416d047e3df4716.png
  • Вопрос задан
  • 400 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
Столкнулся с тем, что yii2 не проверяет методом AJAX уникальность поля.

Не проверяет потому что у Вас нет аякс-валидации. Почитайте в документации как ее правильно реализовать
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Посмотрите это видео, в нём рассказано про ajax валидацию.
Ответ написан
Ваш ответ на вопрос

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

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