Проблема:
- Имеется несколько полей формы с одинаковым именем (я экспериментировал с файловыми инпутами, поэтому назову их ‘files[]‘). Какие именно это поля, по сути неважно, это могут быть к примеру чекбоксы, и называться ‘options[]‘.
- При проверке данных первое значение теряется, вне зависимости от того, соответствует ли оно правилам или нет. С остальными все в порядке.
Очень долго пытался найти решение, а оказалось все достаточно просто. Помимо установки правил/фильтров/коллбэков по отдельности для каждого поля, объект Validate позволяет назначать их сразу для всех полей, для этого вместо имени поля подставляем TRUE. Перед цикличной проверкой в методе check() эти “общие” методы тиражируются по имеющимся полям, а потом удаляются:
// Remove the filters, rules, and callbacks that apply to every field unset($filters[TRUE], $rules[TRUE], $callbacks[TRUE]);
Как мы помним, константа TRUE и есть единица, таким образом для системы поле под номером 1 всегда занято под собственные нужды. Отсюда вывод: именуйте подобные множественные поля вручную, например как ‘files[f1]‘, ‘files[f2]‘ и т.д., либо подкладывайте в Validate уже обработанные массивы.
Попутно выяснилась еще одна проблема. Если я использую только общие правила (т.е. не вызываю
rule()/filter()/callback()для определенного поля), то валидация вообще не пройдет, система вернет FALSE и никаких ошибок. Дело в том, что для полей не будут заполнены метки (labels), поэтому объект Validate подумает, что никаких данных не передано.
UPD. Судя по всему, прозрачная валидация массивов будет добавлена в версии 3.1.0.


Комментариев: 0
Чтобы быть в курсе обсуждения, подпишитесь на RSS-ленту комментариев.