【问题标题】:CodeIgniter and validation of multi-dimensional form element namesCodeIgniter 和多维表单元素名称的验证
【发布时间】:2012-04-03 13:04:26
【问题描述】:

假设我有一个显示组的 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-&gt;input-&gt;post('group'); 将整个结构读入 CodeIgniter,生活很美好。

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

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

我的verifyGroupData($group_data) 函数为每个组调用一次。在这个例子中,它被调用了两次,每次都传入了组数据。这里是现在的虚拟函数:

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() 被调用。

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

【问题讨论】:

  • 您是否尝试过调试 form_validation 库本身以尝试找出发生了什么?它在 system/libraries/form_validation 中。

标签: php codeigniter


【解决方案1】:

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

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

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

【讨论】:

  • 我也试过了。不幸的是,不行。谢谢你的建议。
猜你喜欢
  • 1970-01-01
  • 2013-02-17
  • 2013-05-13
  • 2011-12-05
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 2010-12-13
相关资源
最近更新 更多