Бортовой журнал Ктулху

Yii2 ActiveForm отправка формы только после прохождения валидации

Такое вот решение нашлось в процессе создания формы на базе виджета 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 запрос будет отправляться только после валидации формы.

Тут можно почитать про создание форм и валидацию

А здесь - про сценарии валидации