Ответы пользователя по тегу Yii
  • Yii2, как запустить валидацию формы вручную и получить результат?

    monax-at
    @monax-at Автор вопроса
    Используется yii2, дополнительная библиотека для gui - fuelux
    Решение такое.
    Вешаю калбек на переход на следующий элемент визарда, если заходит в список то останавливаю переход на следующий элемент и запускаю валидацию:
    $('#cart-wizard').on('actionclicked.fu.wizard', function(evt, data) {
    	if(data.direction !== 'next') {return;}
    	if(data.step === 2) {
    		Cart.runValidation();
    		return false;
    	}			
    }

    Прохожусь по заранее сформированному массиву с айдишниками валидируемых полей и вручную запускаю валидацию через yiiActiveForm.
    runValidation: function () {
    		Cart.profileValidator.validations = [];
    		var form = $(Cart.profileValidator.formSelector);
    		for(var key in Cart.profileRows) {
    			form.yiiActiveForm('validateAttribute', Cart.profileRows[key]);
    		}
    	},

    Далее вешаю калбек на событие валидации каждого нужного поля формы.
    Когда все поля будут провалидированы - проверяю есть ли ошибки и если нет - совершаю переход на следующий шаг визарда:
    $(Cart.profileValidator.formSelector).on('afterValidateAttribute', function (event, attribute, messages) {
    			Cart.profileValidator.validations.push({
    				id: attribute.id,
    				message: messages[0]
    			});
    			if (Cart.profileRows.length != Cart.profileValidator.validations.length) {
    				return;
    			}			
    			var hasError = false;
    			for(var key in Cart.profileValidator.validations) {
    				if (Cart.profileValidator.validations[key].message != undefined ) {
    					hasError = true;						
    					break;
    				}
    			}
    			if (!hasError) {
    				$('#cart-wizard').wizard('selectedItem', {
    					step: 3
    				});					
    			}			
    		});
    Ответ написан
    Комментировать