Почему в CodeIgniter 2.2.0 средство проверки формы не вызывает мою пользовательскую процедуру проверки входных данных массива?

Вот ситуация: при создании проекта в CodeIgniter 2.2.0 я пытался проверить табличную форму с помощью специального средства проверки данных. Табличная форма была настроена для передачи данных POST на сервер в стандартном формате массива, и я использовал ненулевые числовые ключи. Мои ключи, которые кодируют важные данные, начинаются с 1 в форме, которую я пытался отладить. Я заметил, что класс Form_validation CodeIgniter вызывал мой валидатор во 2-й и 3-й строке моих данных (с ключами 2 и 3 соответственно), но не в первой строке (с ключом 1).

Почему это должно быть так? Документация CodeIgniter Form_validation указывает, что вы можете использовать нечисловые ключи массива, поэтому можно ожидать, что ненулевые числовые ключи массива тоже будут работать.

1 ответ

Решение

После некоторой отладки я обнаружил, что Form_validation::_execute() (в system/library /Form_validation.php) имеет переменную $ циклы, целое число, начинающееся с нуля, которое измеряет количество раз, когда какое-либо конкретное правило вызывалось в массиве на основе ввода. К сожалению, функция __execute() использует эту переменную $ циклы для ссылки на элементы данных записи (например, строка 552 в моей сборке, которая выглядит как 2.2.0). Это приводит к обходу элементов входного массива, которые не связаны с целыми числами, начинающимися с нуля. Я решил свою проблему, изменив схему ключей массива на счетчик с нуля и кодировав в другом месте данные, которые я помещал в эти ключи.

Возможно, это будет исправлено в CodeIgniter 3, но для тех, кто все еще использует CodeIgniter 2 и проверяет ввод массива из форм с использованием инструментов проверки по умолчанию, следите за этим.

Другие вопросы по тегам