Yii2 ActiveForm отправка формы только после прохождения валидации
2020-02-14
Такое вот решение нашлось в процессе создания формы на базе виджета ActiveForm и сохранения без перезагрузки:
1. используем валидацию на клиенте.
2. ловим событие beforeSubmit и отправляем Ajax-запрос на обработчик.
$form = ActiveForm::begin([
'id' => 'new',
'enableClientValidation' => true,
'enableAjaxValidation' => false,
'validateOnSubmit' => true,
'validateOnChange' => true,
'validateOnBlur' => true,
'action' => '/controller/action',
'options' => [
'onsubmit' => 'create_new()'
]
]);
В форму добавляем в onsubmit функцию, отключаем ajax валидацию.
В элемент action нужно добавить адрес обработчика.
function create_new() {
var $form = $('#new');
$form.on('beforeSubmit', function() {
var data = $form.serialize();
$.ajax({
url: $form.attr('action'),
type: 'POST',
data: data,
success: function (data) {
// Implement successful
},
error: function(jqXHR, errMsg) {
alert(errMsg);
}
});
return false;
});
}
Теперь ajax запрос будет отправляться только после валидации формы.
Тут можно почитать про создание форм и валидацию
А здесь - про сценарии валидации