Итак, снова рубрика «Напильник» и желание сделать мир лучше. На этот раз мы вспоминаем о существовании метода add_rules() объекта Validation и хотим сделать так, чтобы один и тот же набор правил можно было добавить для нескольких полей за раз. Для этого будем использовать расширение встроенной библиотеки Validation.
Решение
Чтобы изменить функциональность скрипта system/libraries/Validation.php создадим новый файл MY_Validation.php в директории application/librarires (как мы помним, префикс «MY_» настраивается в конфиге проекта). Внутри объявим контроллер Validation следующим образом:
<?php defined('SYSPATH') OR die('No direct access allowed.'); class Validation extends Validation_Core { } |
Трогать существующие методы мы не будем, просто добавим свой (назовем его add_massive_rules()). Что необходимо сделать внутри?
- Получить список аргументов.
- Проверить, передали одно поле или массив.
- Добавить правила в указанные поля.
Звучит просто, реализуется еще проще.
public function add_massive_rules($fields, $rules) { // Get the rules $rules = func_get_args(); $rules = array_slice($rules, 1); if (!is_array($fields)) { foreach($rules as $rule) $this->add_rules($fields, $rule); } else foreach($fields as $field) { foreach($rules as $rule) $this->add_rules($field, $rule); } return $this; } |
Примечание. К сожалению, не нашел возможности вызвать add_rules() напрямую, без цикла по правилам. Может, Вы найдете такой способ? Хотя в общем-то в самом add_rules() такой же цикл в итоге и происходит.
Результат
Теперь мы имеем возможность с помощью add_massive_rules() назначать правила сразу для нескольких полей, что весьма актуально в случае заполнения различных анкет.
Комментарии (0)
Будьте в курсе обсуждения, подпишитесь на RSS ленту комментариев к этой записи.