Codeigniter BUG ?: класс проверки формы путают с массивами - PullRequest
1 голос
/ 17 января 2012

Мне нужно создать форму с той же группой полей (данные из базы данных)

Например:

Group 1: Description field, Amount field, Others fields
Group 2: Description field, Amount field, Others fields
Group 3: Description field, Amount field, Others fields

Так что, на мой взгляд, я зацикливаю значения базы данных:

$i = 0;

foreach ($data_from_db as $data) {

  $description = array(
    'name'  => 'description[]',
    'id'    => 'description_field['.$i.']',
    'value' => set_value('description[]', $data->description)
  );

  echo form_label(lang('reward_description'), 'description_field['.$i.']');
  echo form_textarea($description);
  echo form_error('description[]');

  // more fields generated here in similar ways

  $i++
}

В моем контроллере у меня есть:

$this->form_validation->set_rules('description[]', 'lang:project_edit_description', 'required');

// more similar rules here

Согласно документации Codeigniter это правильный способ сделать это, но он не работает правильно.

Codeigniter запутывается с сообщениями проверки.

Например, если я намеренно оставлю намеренно одно из полей описания пусто и отправлю форму, я получу сообщение об ошибке проверки во всех группах (я получаю "поле" Описание ") требуется "также для групп 1, 2 и 3)

1 Ответ

0 голосов
/ 18 января 2012

Просто установите правила для каждого проиндексированного поля.Следующие фрагменты показывают рабочий пример (улучшите его по мере необходимости):


Тестовый контроллер:

function index()
{
    if ($_POST)
    {
        foreach ($_POST as $key => $value)
        {
            if ($key == 'description' && is_array($value))
            {
                foreach ($value as $i => $vector)
                {
                    // set rule for each index
                    $this->form_validation->set_rules('description[' . $i . ']', 'description ' . ($i + 1), 'trim|required');
                }
            }
        }

        $this->form_validation->run();
    }

    $this->load->view('test');
}

Тестовое представление views/test.php:

<?php

echo form_open('');

$data_from_db = $_POST ? $_POST['description'] : array('aaa', 'bbb', 'ccc');
$i = 0;

foreach ($data_from_db as $data)
{
    $description = array(
        'name' => 'description[]',
        'value' => set_value('description[]', $data)
    );

    echo form_label('description ' . ($i + 1) . ':');
    echo form_textarea($description);
    echo '<br>';
    // set error for each index
    echo form_error('description[' . $i . ']');

    // more fields generated here in similar ways

    $i ++;
}

echo form_submit('mysubmit', 'Try it');
echo form_close();
?>

Этот код будет показывать The description x field is required. только в пустых полях.

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