使用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;
}
我的问题是:
为什么这是默认的返回值?如果我改变它可以吗?
答案 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', '', '');
}