CodeIgniter: проверка формы с многомерными данными POST - PullRequest
8 голосов
/ 25 мая 2011

Таким образом, фреймворк - 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'
)

Ответы [ 3 ]

2 голосов
/ 21 июля 2011

Следующий код контроллера работает на 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();

    }
1 голос
/ 04 декабря 2013

Вы можете использовать это для циклического перебора переменной 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');
        }
    }
0 голосов
/ 25 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...