codeigniter form_error用于数组键

时间:2013-06-03 13:50:47

标签: php codeigniter

我有一个包含多个具有相同名称的输入字段的表单。这些使用for循环填充。

<input type="text" id="form_dest_numb[<?=$i?>]" name="form_dest_numb[<?=$i?>]" value="<?php echo $form_dest_numb[$i];?>" maxlength="15" size="15" />

我现在通过使用相同的回调函数对这些字段应用验证。我现在的问题似乎是显示表单错误。

我目前有以下代码:

<?php if(form_error('form_dest_numb['.$i.']')) { echo "<div class=\"error\"><span class=\"error\">" . form_error('form_dest_numb['.$i.']') . "</span></div>"; } ?>

我似乎无法显示特定键的错误消息。我希望错误消息突出显示数组中受影响的行。有没有办法将密钥传递给form_error变量名?

2 个答案:

答案 0 :(得分:1)

除非你通过扩展Form_validation错误函数(由表单助手form_error函数使用)来编写自己的函数,否则没有。

此类中的CI error函数将参数作为字段名称的原因,您设置的规则中的字段名称为$this->form_validation->set_rules('form_dest_numb[]','','callback_validate_dest_‌​numb');因此CI正在查找名称{{1}中的错误不在form_dest_numb[]等......

解决此问题的另一种方法是为每个字段设置验证规则(也使用for循环)

form_dest_numb[1], form_dest_numb[1]

答案 1 :(得分:0)

除了Elijan Sejic的答案,这是正确的,我编写了以下函数来帮助设置验证规则,并获取错误和值:

在MY_Form_validation.php中:

function set_rules_array($name, $label, $rules)
{
    for ($i = 0; $i < count($_POST[$name]); $i++)
    {
        $this->set_rules("{$name}[$i]", $label, $rules);
    }
}

在帮助者中我正在呼叫form2

function form2_error($name)
{
    static $array_fields = array();

    // if the last 2 characters are [], then handle this as an array field.
    if (substr($name, -2) === '[]')
    {
        // If this field has been form2_error'd before, then increment the index, otherwise set to zero.
        $array_fields[$name] = ! isset($array_fields[$name]) ? 0 : $array_fields[$name] + 1;
        $name = substr($name, 0, -2) . '[' . $array_fields[$name]. ']';
    }
    return form_error($name);
}

function form2_set_value($name)
{
    static $array_fields = array();

    // if the last 2 characters are [], then handle this as an array field.
    if (substr($name, -2) === '[]')
    {
        // If this field has been form2_error'd before, then increment the index, otherwise set to zero.
        $array_fields[$name] = ! isset($array_fields[$name]) ? 0 : $array_fields[$name] + 1;
        $name = substr($name, 0, -2) . '[' . $array_fields[$name]. ']';
    }
    return set_value($name);
}

如果您的表单有一个“添加更多”按钮并且您不知道预期会有多少数组元素,这将非常有用。