-
Notifications
You must be signed in to change notification settings - Fork 22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Динамическая валидация. #9
Comments
Тут есть 2 варианта:
Также сегодня опубликовал пост на хабре - http://habrahabr.ru/post/246521/ , в котором описал механизм создания кастомных правил |
Возник тот же вопрос. |
Обычно в каждом проекте есть какие-то индивидуальные требования и каждый проект содержит библиотеку с набором своих специфических правил. Например, правило для вашего случая: var LIVR = require('livr');
var dynamicObject = function(selectorField, livrs, ruleBuilders) {
var validators = {};
for (var selectorValue in livrs) {
var validator = new LIVR.Validator(livrs[selectorValue]).registerRules(ruleBuilders).prepare();
validators[selectorValue] = validator;
}
return function(object, params, outputArr) {
if ( object === undefined || object === null || object === '' ) return;
if ( typeof object !== 'object' ) return 'FORMAT_ERROR';
var validator = validators[ object[selectorField] ];
if (!validator) {
var error = {};
error[selectorField] = 'NOT_SUPPORTED';
return error;
};
var result = validator.validate( object );
if ( result ) {
outputArr.push(result);
return;
} else {
return validator.getErrors();
}
}
}
LIVR.Validator.registerDefaultRules({ dynamic_object: dynamicObject });
var validator = new LIVR.Validator({
dynamicData: [{ dynamic_object: ['type', {
string: { 'value': [ 'required', {'min_length': 10} ] },
number: { 'value': [ 'required', 'positive_integer' ] }
}]}]
});
var validData = validator.validate({
dynamicData: {
type: 'string',
value: 'qwert'
}
});
console.log('errors', validator.getErrors());
var validData = validator.validate({
dynamicData: {
type: 'number',
value: 'qwert'
}
});
console.log('errors', validator.getErrors()); |
У меня тоже недавно был такой кейс. Правило действительно похоже на "list_of_different_objects", (только для одного объекта) логично было бы увидеть его в стандартной поставке. |
Если это реально востребованный кейс, то можно добавить его в спеку. Пока переоткрываю и отмечаю, как proposal. Также привествуются альтернативные решения данной проблемы |
Added to spec. Will be available when updated spec is published. Rule name will be "variable_object" |
Добрый день.
А может ли данное описание использоваться для динамической валидации?
Например у нас есть два поля:
type_of_data - тип данных (цифра, строка)
value - значение, если цифра то от 1 до 100
если строка то от 1 до 3 символов
По типу данных все понятно:
type_of_data : { one_of('digital', 'string') },
Но вот как описать правила для значений через условие?
Типа:
Если type_of_data eq 'digital' то value : {number_between(1,100)}
Если type_of_data eq 'string' то value : {length_between(1,3)}
The text was updated successfully, but these errors were encountered: