CodeIgniter数组文本输入表单验证

时间:2015-07-22 19:46:44

标签: php arrays codeigniter validation

在CodeIgniter中验证文本输入字段数组时,是否可以获取错误消息的每个数组索引?

我(默认情况下)有三个字段,前两个是必填字段,还有更多字段,可动态添加或删除。

<input name="url[]" value="" type="text">
<input name="url[]" value="" type="text">
<input name="url[]" value="" type="text">

现在我循环输入数组

foreach ($data ['urls'] as $idx => $url)
{
    $num = $idx + 1; // counting number
    $this -> form_validation -> set_rules('url[' . $idx . ']', 'Url ' . $num, 'trim|callback_validate_input_url[ ' . $idx . ' ]');
}

而不是

$this->form_validation->set_rules('url[]', 'URL', 'trim|callback_validate_input_url');

我通过自定义回调验证它

public function validate_input_url ( $uri, $position )
{
    if ( $position <= 1 && !$uri ) // check if it's the first two input arrays and if they're empty
    {
        $this -> form_validation -> set_message('validate_input_url', 'This field cannot be empty');
        return false;
    }

    if ( $position >= 2 && !$uri )
        return true; // true if it's the third or later optional URL

    $pattern = '/^http:\/{2}.*/';
    // must start with http://
    if ( !preg_match($pattern, $uri) )
    {

        $this -> form_validation -> set_message('validate_input_url', 'This field must have a valid URL');
        return false;
    }
    return TRUE;
}

这样我就可以获得生成错误的输入的错误消息

<?php 
    foreach ($urls as $idx => $url) {
?>
    <input type="text" name="url[]" value="<?php echo $url ?>">
    <?php echo form_error('url[' . $idx . ']'); ?>
<?php 
} ?>

那么有没有办法获取生成错误的输入字段的错误消息,而不必循环遍历所有输入字段并为每个字段单独附加规则?我查看了文档,但我没有看到任何相关内容。所以我不确定我是否忽视了某些事情,或者我是否采用这种方式是唯一的方式。

1 个答案:

答案 0 :(得分:0)

你的问题听起来像你在问,“有没有办法看到导致错误的原因,而不检查可能导致错误的所有内容。”如果这是问题,答案是否定的。您必须为每个输入分配验证规则,然后如果要查找导致错误的那个(或更多),则必须搜索它们。您可以通过使用这里解释的验证规则集https://ellislab.com/codeigniter/user-guide/libraries/form_validation.html来稍微简化您的方法,但我不知道如何避免检查可能导致错误的每个事情以查看导致错误的原因。一般来说,你的方法似乎很好,你为什么要改变它?

相关问题