Проверка формы воспламенителя кода со всеми полями, опубликованными в виде массива - PullRequest
4 голосов
/ 27 апреля 2011

У меня проблема с проверкой общей формы в codeigniter. В моем случае поля размещаются в массиве $m_data = json_decode($this->input->post('data')); и должны быть проверены перед отправкой их в модель. см. этот пример

        $m_data = json_decode($this->input->post('data'));          
        $validation_rules = array(
             $m_data['title']   => 'trim|xss_clean|required|max_length[50]',
             $m_data['code']    => 'trim|xss_clean|required|max_length[50]'
        );
        foreach ($validation_rules as $key => $value){
            $this->form_validation->set_rules($key,$key,$value);
        }


        if ($this->form_validation->run()) {
            foreach ($validation_rules as $key => $value){          
                $m_data[$key] = $this->form_validation->set_value($key);
            }
            // do insertion
        }

проблема здесь в том, что проверка формы будет принимать каждое поле отдельно в качестве опубликованных данных с использованием «ключа» значения и выполнять правила над ним. Я попытался создать пользовательскую проверку , которая получит массив полей в качестве входных данных, но я понятия не имел, как это сделать.

Можете ли вы помочь мне определить способ проверки содержимого массива с помощью проверки формы CI, любой ввод приветствуется

Ответы [ 2 ]

4 голосов
/ 27 апреля 2011

Вы можете использовать массивы в качестве имен полей с проверкой формы CI.

http://codeigniter.com/user_guide/libraries/form_validation.html#arraysasfields

То, что вам нужно сделать, это что-то вроде этого.

$this->form_validation->set_rules('data[]', 'Data', 'trim|xss_clean|required|max_length[50]');

if ($this->form_validation->run()) {
// DO INSERT
}
else
{
// LOAD VIEWS
}

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

<input type="radio" value="Test data" name="data[]" />
<input type="radio" value=" More data " name="data[]" />
<input type="radio" value="3" name="data[]" />
<input type="input" value="" name="data[]" />

Это будет работать, только если все ваши правила одинаковы для каждого поля.

1 голос
/ 30 апреля 2011

Надеюсь, я нашел ответ на этот вопрос, который действительно работает, но я думаю, что это всего лишь временный ответ, так что не зависите от него, но он работает.

        $validation_rules = $this->config->item('class');
        foreach ($validation_rules as $row){
            $_POST[$row['field']] = $m_data->$row['field'];         
        }

что я сделал здесь, чтобы установить$_POST['name_of_fields_in_the_array'] по значению, опубликованному в представлении, $m_data, и это сделало проверку работоспособной очень хорошо

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