请参阅codeigniter

时间:2016-06-17 07:14:01

标签: php arrays codeigniter validation

我想在CodeIgniter 3中创建自定义验证规则,但我想验证发布的数组(不是字符串)。在CodeIgniter文档中,我也看到了数组。

HTML:

<select name="bonus[]" class="form-control"> ... </select>
<select name="bonus[]" class="form-control"> ... </select>
<select name="bonus[]" class="form-control"> ... </select>

验证

$this->form_validation->set_rules("bonus[]", "Bonuses", "all_unique");

确认规则all_unique

public function all_unique($array)
{           
    $this->CI->form_validation->set_message('all_unique', '%s are not unique.');

    if(count(array_unique($array))<count($array))
    {
        // Array has duplicates
        return FALSE;
    }
    else
    {
        // Array does not have duplicates
        return TRUE;
    }
}

一般来说,我想检查选定的奖金是否重复。 (选择奖励字段的数量可能会有所不同。)

这个问题是传递给all_unique验证方法的值是作为字符串而不是数组传递的,它是第一个bonus []字段的值。如何验证发送奖金数组[]。

1 个答案:

答案 0 :(得分:1)

您需要使用set_message中的callback来调用all_unique函数

$this->form_validation->set_rules("bonus[]", "Bonuses", "callback_all_unique");

要在回调中获取数组字段值,请使用post方法

function all_unique()
{           
    $array = $this->input->post('bonus');// get bonus value
    $this->CI->form_validation->set_message('all_unique', '%s are not unique.');

    if(count(array_unique($array))<count($array))
    {
        // Array has duplicates
        return FALSE;
    }
    else
    {
        // Array does not have duplicates
        return TRUE;
    }
}