CodeIgniter自定义验证会覆盖核心验证

时间:2013-08-31 22:41:39

标签: php forms codeigniter validation

我需要一个针对我的表单输入的特定规则,所以我像这样扩展了库:

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class MY_Form_validation extends CI_Form_validation
{
    function __construct($config = array())
    {
        parent::__construct($config);
    }
    //.............
}

所以这对我很有用,但是现在我注意到如果验证函数例如这个:

public function is_sentence($str)
    {
        if (!preg_match("/^[a-zA-Z0-9-?._ -]+$/", $str))// Alpha, Int, Basic Punctuation, Hyphens, Underscores, Spaces
        {
            $this -> set_message('is_sentence', 'The %s field can only contain letters, digits, spaces, dashes and periods.');
            return FALSE;
        }
    }

确实return TRUE(意味着它只包含句子字符)验证将从CodeIgniter传递run(),但其他形式将失败。这就是问题的开始,因为form_helper中的set_value()函数不再使用 is_sentence规则将输入字段留空。

这是我第一次扩展这个库,我无法通过这个问题。

总结一下:

如果使用自定义验证功能,如果除自定义验证之外的所有其他表单输入的验证失败,则自定义验证的set_value()不再回显。

现在如果我故意在is_sentence的验证中导致错误,那么set_value()按预期工作!

同样,对于使用默认验证规则的其他form_input(例如'interger'),这种异常不会发生。

我很难过,任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

我遇到的问题是我没有回归真实。像这样修理它:

public function is_sentence($str)
    {
        if (!preg_match("/^[a-zA-Z0-9-?._ -]+$/", $str))// Alpha, Int, Basic Punctuation, Hyphens, Underscores, Spaces
        {
            $this -> set_message('is_sentence', 'The %s field can only contain letters, digits, spaces, dashes and periods.');
            return FALSE;
        } else {
            return TRUE;
        }
    }