如何动态设置CodeIgniter的表单验证规则?

时间:2009-02-27 13:46:49

标签: php codeigniter

使用新版本的CodeIgniter;您只能在静态form_validation.php文件中设置规则。我需要分析发布的信息(即只有他们选择了一个复选框)。只有这样我才能验证某些字段。最好的方法是什么,或者我必须使用现在弃用的旧表单验证类?

3 个答案:

答案 0 :(得分:5)

您不仅可以在config / form_validation.php文件中设置规则。您也可以使用以下方式设置它们:

   $this->form_validation->set_rules();

有关详情:http://codeigniter.com/user_guide/libraries/form_validation.html#validationrules

但是,CI具有的首选顺序是首先检查是否存在使用set_rules()设置的规则,如果没有,请查看配置文件中是否定义了规则。

因此,如果您在配置文件中添加了规则,但在操作中调用了set_rules(),则永远不会达到配置规则。

知道对于条件验证,我会在模型中有一个特定的方法,根据输入(对于该特定操作)初始化form_validation对象。我需要这样做的典型情况是验证送货地址和帐单地址(它们是相同还是不同)。

希望有所帮助。 :)

答案 1 :(得分:3)

您可以编写自己的函数来检查是否选中了所述复选框,并手动应用验证。

function checkbox_selected($content) {
    if (isset($_REQUEST['checkbox'])) {
        return valid_email($content);
    }
}

$this->form_validation->set_rules('email', 'Email', 'callback_checkbox_selected');

答案 2 :(得分:0)

如果您想避免编写自己的验证功能,我遇到了this site,这表明,如果您使用Form Validation类动态设置规则,则可以简单地构建规则动态地设置set_rules()的字符串参数。

首先测试POST数据以确定您的条件是否满足(例如,选中复选框),然后根据需要在传递给set_rules()的规则字符串中添加“| required”。