$ this-> form_validation-> run()在没有验证规则的情况下返回FALSE

时间:2014-04-18 23:03:10

标签: php codeigniter validation

使用CodeIgniter的Form_validation类时,set_rules()方法允许用户在其表单字段中添加无限数量的检查。这些规则通常都在同一个地方定义,就在调用run()方法之前。

有效范例

// Require the user to be a werewolf.
$this->form_validation->set_rules('werewolf', 'Are you a Werewolf?', 'required');

// If the form validates.
if ($this->form_validation->run())
{
    // [...]

(不,我实际上并没有运行狼人网站)

代码很有意义,而且很容易理解。但是,有时候,这可能是不受欢迎的。例如,您可能不关心用户是否是狼人除非是午夜。您的代码可能如下所示:

无效示例

// If it is midnight.
if (date('G') == '0')
{
    // Require the user to be a werewolf.
    $this->form_validation->set_rules('werewolf', 'Are you a Werewolf?', 'required');
}

// If the form validates.
if ($this->form_validation->run())
{
    // [...]

将无效

至少,它要到午夜才能工作。

默认情况下,如果没有声明任何规则,$this->form_validation->run()将返回FALSE。在第二个示例中,除非是午夜,否则不会设置任何规则,因此表单永远不会验证。从逻辑上讲,人们会认为如果没有规则,表格无论如何都应该验证。相反,无论如何都失败

/ system / libraries / Form_validation :: run()

(第293-297行)

// No validation rules?  We're done...
if (count($this->_config_rules) == 0)
{
    return FALSE;
}

我的问题是:

为什么这是默认的返回值?如果我改变它可以吗?

2 个答案:

答案 0 :(得分:1)

@Nathanael - 你是对的,我不记得,如果没有在V3中解决这个问题,或者没有。

处理此问题的两种方法:

1)(这不会像你当前设置代码的方式那样工作,但它会有一个小柚木) - 始终在每个字段上设置“trim”。这将触发所有验证代码。即使您不想做任何必要的事情,这也是重新填充表单的旧解决方法。

2)更好 - 为始终检查的字段制定自定义规则,并在规则内有条件地要求它。

请记住,验证库规则实际上只是lib上的函数,因此您可以在自定义规则中执行以下操作:

$this->validation->required($str);

输入代码以检查您的输入。

答案 1 :(得分:1)

只需设置空规则,验证库将自动通过并继续。

$ this-> form_validation-> run()将返回true。

$this->form_validation->set_rules(fieldName,'','');

参考https://github.com/bcit-ci/CodeIgniter/issues/1558

以您的代码为例,您的代码将是这样的

// If it is midnight.
if (date('G') == '0') {
    // Require the user to be a werewolf.
    $this->form_validation->set_rules('werewolf', 'Are you a Werewolf?', 'required');
} else {
    $this->form_validation->set_rules('werewolf', '', '');
}