CodeIgniter和多维表单元素名称的验证


CodeIgniter and validation of multi-dimensional form element names

假设我有一个显示组的HTML表单,在每个组中我都有一个名称和多个用户。以下是一个示例HTML结构,经过简化后仅包含相关元素:

Group Name: <input name='group[0][name]' />
User 1: <input name='group[0][users][0]' />
User 2: <input name='group[0][users][0]' />
User 3: <input name='group[0][users][0]' />
<hr />
Group Name: <input name='group[1][name]' />
User 1: <input name='group[1][users][0]' />
User 2: <input name='group[1][users][0]' />
User 3: <input name='group[1][users][0]' />

我使用$this->input->post('group');将整个结构读入CodeIgniter,生活很好。

我想添加带有自定义功能的表单验证。如果我这样做:

$this->form_validation->set_rules('group[]', 'Group', 'callback_verifyGroupData');

我的CCD_ 2函数为每个组调用一次。在这个例子中,它被调用两次,每次都有组数据传入

function verifyGroupData($data) {
    log_message('info','KRYSTODO: verifyGroupData data ' . print_r($data,true));
    $this->form_validation->set_message('verifyGroupData', 'This is not entirely checked yet.');
    return false;
}

问题是,我需要能够分别显示每组的错误。现在,当我想在HTML视图中添加一个单独的错误显示时,我会这样做:

<?php if(form_error('group[]')) { 
        echo '<div class="validationError">' . form_error('group[]') . '</div>'; 
    }?>

问题是,此代码无法区分组[0]和组[1]的错误集。

根据CodeIgniter文档,我应该能够做到这一点:

$this->form_validation->set_rules('group[0]', 'Group', 'callback_verifyGroupData');
$this->form_validation->set_rules('group[1]', 'Group', 'callback_verifyGroupData');

在实践中,这根本不会导致我的verifyGroupData()被调用。

你能提供一个解决这个问题的方法吗?

这可能值得一试。。。将您的规则更改为:

 $this->form_validation->set_rules('group[0][]', 'Group','callback_verifyGroupData');

第二组也是如此。请注意字段名称中的额外括号。恐怕还没有机会测试一下,但值得一试!:-)