CodeIgniter: проверка формы с помощью многомерных данных POST

Таким образом, основой является CodeIgniter 2.0.2. У меня есть форма, в которой есть группы полей, которые соответствуют строкам в базе данных. Имена полей находятся в формате:

opt[0][foo] opt[0][bar] opt[1][foo] opt[1][bar] etc... 

Индекс (1,2 и т. Д.) Не соответствует идентификаторам строк в базе данных, это просто способ разделить группы полей. В индексе могут быть пробелы, так как пользователи могут добавлять и удалять произвольное количество групп полей. Все группы идентичны, то есть они содержат точно такой же набор полей с одинаковыми именами второго уровня.

Я хочу иметь возможность использовать библиотеку проверки CodeIgniter для проверки формы и (p) повторного заполнения по мере необходимости. Я нашел много сообщений (в дополнение к отличному руководству пользователя CI) по предварительному заполнению, и я знаю, как получить работу с повторным заполнением в целом. Тем не менее, это первый раз, когда мне пришлось попробовать его с именами индексированных полей, как указано выше. Я пробовал ниже, и он не работает:

 array( 'field' => 'opt[][foo]', 'label' => 'Foo', 'rules' => 'required' ) 

Я предполагаю, что я просто надеялся, что слишком много, и CodeIgniter не поддерживает то, что мне нужно. Расширение существующей библиотеки валидации формы это вариант, поэтому, если кто-то находится в одной ситуации и может предоставить некоторые советы, которые были бы очень желанными.

ОБНОВИТЬ:

Еще немного дополнительной информации, я также попробовал проверку специально проиндексированного поля (см. Ниже), и это также не сработало … Насколько я понимаю, многомерная проверка должна работать в конкретном случае:

 array( 'field' => 'opt[0][foo]', 'label' => 'Foo', 'rules' => 'required' ) 

Solutions Collecting From Web of "CodeIgniter: проверка формы с помощью многомерных данных POST"

Следующий код контроллера работает для меня на CI 2.0.2

 public function test() { $this->load->library('form_validation'); $this->load->helper('form'); $this->form_validation->set_rules('test[test1][test2]', 'Test', 'required|valid_email'); $this->form_validation->run(); echo validation_errors(); echo form_open($this->uri->uri_string()); echo form_input('test[test1][test2]', set_value('test[test1][test2]')); echo form_submit(); echo form_close(); } 

Вы можете использовать это, чтобы opt переменную opt и задать правила валидации для каждого входа.

 if(!empty($opt)) { foreach($opt as $id => $value) { $this->form_validation->set_rules('opt[' . $id . '][foo]', 'Foo', 'required'); $this->form_validation->set_rules('opt[' . $id . '][bar]', 'Bar', 'required'); } } 

Вы должны взглянуть на функции обратного вызова для проверяющего класса – это поможет вам выполнить то, что вам нужно для проверки.