Контент


Правила валидации для группы полей

Итак, снова рубрика «Напильник» и желание сделать мир лучше. На этот раз мы вспоминаем о существовании метода 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() назначать правила сразу для нескольких полей, что весьма актуально в случае заполнения различных анкет.

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Опубликовано в напильник.

Теги: , , , .


Комментарии (0)

Будьте в курсе обсуждения, подпишитесь на RSS ленту комментариев к этой записи.



Можно включить подсветку кода: <code><pre lang="">...</pre></code>
Разрешены некоторые HTML теги

или используйте trackback.