@versus_stack я покурил немного код bem-forms. суть такая:
1. модификаторы _has-validation потребуются и на form и на form-field одновременно. при этом модификатор на форме нужен только для того, чтобы в цикле обойти все вложенные form-field и вызвать на них валидацию.
2. модификатор required, насколько я могу судить по коду, есть только у form-field. Чтобы объявить какое-либо поле обязательным, достаточно просто установить этот модификатор для form-field. Если при отсутствии значения требуется кастомное сообщение об ошибке (по умолчанию будет «Required field»), то его можно передать через js-параметры блока:
{
block : 'form-field',
mods : {
type : 'input',
'has-validation' : true,
required : true
},
js: 'Алярма! В это поле нужно что-то ввести!'
content : [
{
block : 'label',
content : 'Input'
},
{
block : 'input',
name : 'firstName'
}
]
}
3. Про как запретить какую-то строку.
Нужно повесить на form-field модификатор _validate с каким-либо значением. Например, можно воспользоваться одним из существующих (скажем,
https://github.com/bem-contrib/bem-forms/blob/master/common.blocks/form-field/_validate/form-field_validate_email.js), а можно написать свой собственный по аналогии.
Судя по тому, что лежит в репо, ожидается, что сама логика валидации будет вынесена в модификатор блока validation и просто допушиваться в набор валидаторов в модификаторе _validate в блоке form-field. В случае с приведенным выше валидатором имейлов, логика хранится в
https://github.com/bem-contrib/bem-forms/blob/master/common.blocks/validation/_email/validation_email.vanilla.jsНадеюсь, ответил на вопрос.