Воюю с ajax.
Он пока побеждает.
Хочу выводить модальное окно при запросе на смену email.
Идея такова.
Юзер вводит в форму новый email.
Эта строка проходит валидацию и записывается в базу, а клиенту улетает письмо с get урлом.
И после отправки должно выводиться модальное окно, мол запрос отправлен, глянь свою новую почту.
Поэтому, в форме, пришлось отказаться от
Код: Выделить всё
'enableAjaxValidation' => true,
Response нужен, чтобы выводить ошибки валидации (например) нового email.
Делаю так:
Код: Выделить всё
$('#form').on('beforeSubmit', function () {
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
data: form.serializeArray(),
success: function (data) {
if (data.error === true) {
//Здесь должны выводиться ошибки, если есть
$('.invalid-feedback').text(data.text);
} else {
//Это модальное окно
form.siblings('#feedback').show();
}
},
error: function () {
alert('Возникла неизвестная ошибка');
},
})
Код: Выделить всё
if (Yii::$app->request->isAjax) {
Yii::$app->response->format = Response::FORMAT_JSON;
if ($model->load(Yii::$app->request->post())) {
if($model->validate()) {
if ($res = $model->changeEmail()) {
return [
'text' => $res,
'error' => false,
];
}
} else {
return [
'text' => $model->errors,
'error' => true,
];
}
}
}
Оно и понятно, массив же.
Json::encode($model->errors) не помогает, ибо вывод выполняется так:
{"email":["Необходимо ввести новый Email"]}.
А как вывести ошибку именно строкой?
Вернее, как вывести ошибку, добавленную именно строкой, в контроллере?
Давно задавался этим вопросом, но постоянно удавалось обойти его, воспользовавшись иным решением.
А тут уже не отвертеться
Если изобретаю велосипед, подскажите пжл что почитать.
Может быть уже существует готовое решение.