【问题标题】:Codeigniter 2 - Form Validation Custom RulesCodeigniter 2 - 表单验证自定义规则
【发布时间】:2019-11-21 23:41:02
【问题描述】:

我正在使用 Codeigniter 2.2.5 和 PHP 5.6

我想使用 codeiginter 函数验证用户输入。这是正常的方式:

$this->form_validation->set_rules('mail', 'E-Mail', 'required|trim|xss_clean|strip_tags');

这里我想添加一个函数来检查电子邮件地址是否包含在定义的列表中。

自定义规则有一个回调函数,但这仅适用于控制器类。我在第三方库课程中。

喜欢

$this->form_validation->set_rules('username', 'Username', 'callback_username_check');

是否有人知道如何使用 CodeIgniter 2 实现这一点,还是我必须自己检查并创建自定义错误消息?

我知道 CodeIgniter 3 中有新功能,但不幸的是,我必须使用 CodeIgniter 2。

【问题讨论】:

  • 然后在你创建规则的地方制定规则
  • 自定义规则仅在您位于控制器内部时才有效

标签: php codeigniter validation


【解决方案1】:

在 codeigniter 2 中,无法从控制器外部使用回调方法。因此,如果您在库或模型中,则必须采取解决方法。

您应该做的是在初始化您所在的模型/库之前加载一个辅助函数。然后将其视为普通 PHP 函数而不是“回调”。

像这样:

$this->form_validation->set_rules('username', 'Username', 'username_check');

username_check 是您在帮助程序中加载的函数。

无论如何,数据操作和数据验证是有区别的。验证只应在控制器中进行。所以你可能不得不重构你的代码。从长远来看,这将对您有所帮助。

【讨论】:

  • 我已经添加了一个答案,在评论部分没有足够的字符。
【解决方案2】:

@佩德罗·马丁斯

谢谢。我创建了一个辅助类并实现了检查功能。该函数被正确调用,并且要检查的值通过它。在我的检查函数中,如果值正常,则返回 TRUE,否则返回 FALSE。

图书馆代码:

$this->form_validation->set_rules('mail', 'E-Mail', 'checkMail');

助手类:

function checkMail($value)
{
    if($value == ".....") //if clause works correctly
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

但是,无论我的自定义帮助检查函数返回什么,表单验证函数总是返回 TRUE。

$this->form_validation->set_rules('mail', 'E-Mail', 'checkMail');       

    //if form validation false -> show form again
    if ($this->form_validation->run() == FALSE)
    {
        // ...... is never triggered
    }
    else //if form validation success, proceed
    {
        // ......
    }

不幸的是,程序结构是这样给出的,因此我无法在控制器中找到我的代码。

【讨论】:

  • 重构您的代码,以便仅在控制器中进行数据验证。我谈到的解决方法不是长期的。
猜你喜欢
  • 2020-07-02
  • 2020-04-27
  • 2012-01-01
  • 2012-03-31
  • 2015-04-10
  • 1970-01-01
  • 2017-02-05
  • 2012-11-19
  • 2012-01-03
相关资源
最近更新 更多