CodeIgniter数组文本输入表单验证


CodeIgniter Array Text Input Form 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 
} ?>

那么,是否有一种方法可以获得生成错误的输入字段的错误消息,而不必循环遍历所有输入字段并为每个字段单独附加规则?我看了所有的文件,没有看到任何相关信息。所以我不确定是我忽略了什么,还是我这样做是唯一的方法。

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