Сообщение для уникального валидатора не приходит в yii2

У меня есть следующее правило, чтобы электронная почта была уникальной в модальном режиме

   [['email'], 'unique'],

Я не использую ajax для отправки формы. Проблема в том, что я получаю все сообщения проверки правил, кроме уникального правила.

Итак, как заставить уникальное правило работать на стороне клиента?

Что мне не хватает? Пожалуйста помоги


person alwaysLearn    schedule 08.07.2016    source источник
comment
без проверки ajax невозможно проверить уникальное правило на стороне клиента   -  person Maksym Semenykhin    schedule 08.07.2016
comment
@СеменихинМаксим, но я не сохраняю форму с помощью ajax.. что мне делать? Пожалуйста, предложите   -  person alwaysLearn    schedule 08.07.2016
comment
попробуй этот ['email', 'unique', 'targetClass' => '\frontend\models\User', 'message' => 'This email address has already been taken.'],   -  person vishuB    schedule 08.07.2016


Ответы (2)


Единственный способ — enableAjaxValidation на стороне клиента

Документ об этом

Чтобы включить проверку AJAX для одного поля ввода, настройте для свойства enableAjaxValidation этого поля значение true и укажите уникальный идентификатор формы:

use yii\widgets\ActiveForm;

$form = ActiveForm::begin([
    'id' => 'registration-form',
]);

echo $form->field($model, 'username', ['enableAjaxValidation' => true]);

// ...

ActiveForm::end();

Вам также необходимо подготовить сервер, чтобы он мог обрабатывать запросы проверки AJAX. Этого можно добиться с помощью фрагмента кода, подобного следующему, в действиях контроллера:

if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
    Yii::$app->response->format = Response::FORMAT_JSON;
    return ActiveForm::validate($model);
}
person Maksym Semenykhin    schedule 08.07.2016
comment
Когда я добавляю код, подобный этому... проверки на стороне клиента перестают работать. При отправке он перенаправляет меня на сервер без какой-либо проверки. - person alwaysLearn; 08.07.2016
comment
предоставьте полный html-код php js, и мы поможем вам с этим - person Maksym Semenykhin; 08.07.2016
comment
Вы должны перезаписать функцию clientValidateAttribute перед использованием ajaxValidation. Ссылка: http://www.yiiframework.com/doc-2.0/guide-input-validation.html#deferred-validation - person ThanhPV; 08.07.2016

К сожалению, это должно исходить от ActiveRecordSet базы данных при обновлении, когда он понимает, что это поле уникально. Самый простой способ — выполнить проверку, если ($model-›save()) истинно, в противном случае верните/отобразите форму, и вы увидите сообщение фреймворка о том, что конкретное поле уже занято.

person Frank R Tilugulilwa    schedule 06.03.2021
comment
пожалуйста, измените формат вашего ответа для более удобочитаемых причин. - person Pejman Kheyri; 06.03.2021