从CodeIgniter(PHP)中的库中设置form_验证规则

从CodeIgniter(PHP)中的库中设置form_验证规则,php,codeigniter,validation,Php,Codeigniter,Validation,好吧,我遇到了一个关于CodeIgniter灵活性的大问题。我有很多个人规则(比如20条)针对大型项目中表单中的输入 当我使用CodeIgniter的经典“回调”系统时,一切正常。我只是把方法和表单检查放在同一个类中,它正确地检查了它 我的问题是: 1) 我想在另一个控制器中以另一种形式使用所有这些规则,而不复制/粘贴代码我们都知道这是肮脏/邪恶的 2) 理想情况下,我希望能将这些规则放在一个大的库中,因为它需要大约800行,而让它放在我的控制器中不是一个好主意;正如我所说,这个项目相当庞大 我

好吧,我遇到了一个关于CodeIgniter灵活性的大问题。我有很多个人规则(比如20条)针对大型项目中表单中的输入

当我使用CodeIgniter的经典“回调”系统时,一切正常。我只是把方法和表单检查放在同一个类中,它正确地检查了它

我的问题是:

1) 我想在另一个控制器中以另一种形式使用所有这些规则,而不复制/粘贴代码我们都知道这是肮脏/邪恶的

2) 理想情况下,我希望能将这些规则放在一个大的库中,因为它需要大约800行,而让它放在我的控制器中不是一个好主意;正如我所说,这个项目相当庞大

我花了6个小时寻找解决方案,但绝对没有干净的东西:

  • 我已经有了一个我的表单验证来放置一些一般规则,但我不喜欢将我的特定规则混合在一个全局类中的想法,而这个全局类每次都会徒劳地调用它。此外,这些规则还包含许多库、模型、原生CI核心方法,如$this->input->post(),当我将所有内容放入MY_Form_验证时,这些方法会产生错误。不是好的解决方案:(

  • 我创建了一个MY_Controller,其中包括一个名为“imports”的方法,该方法在控制器内重新生成选定的库方法(在PHP4中,如果人们好奇,它是一种“聚合_方法”函数);系统工作正常,但CodeIgniter不理解。这些方法可以在控制器内调用,但框架似乎检查$CI内容以调用规则(在“/system/”中的Form_validation.php第590行)所以最后它不起作用;修改这个核心部分也很困难,我宁愿不碰它,也放弃了

$this->load->library('volt/lbl_validation'); $this->imports('Lbl_validation'); //然后,您可以使用控制器中的$this->method()调用任何$this->lbl\u validation->method()

  • 我试图破解CI,在我的库中创建一个定制的表单验证(“lbl\U验证”);系统有点混乱,但仍然有效。问题是,当我回到CI表单验证系统显示错误消息时,它是一个真正的意大利面代码,没有那么好地工作。也不是一个好的解决方案
我也尝试过其他一些糟糕的解决方案,但我不愿意承认

现在我站在我的电脑前问自己,为什么好人身上会发生坏事,为什么在CodeIgniter中很难将set_规则和调用的方法区分开来,为什么他们没有提前计划,人们可能需要将库方法称为规则。我不知道该怎么做,我也不知道是否要提出一个愚蠢的要求()找个地方把它弄得又脏又乱,就像我现在的桌子一样

也许,有人有一个很好的dans clean解决方案。我所有的希望都转向StackOverFlow社区;有人?一个疯狂的CI极客


谢谢;)

处理验证的唯一好方法是在保存到数据库(换句话说,保存到模型中)之前,将验证规则放在最后的位置。通过这样做,相同的规则可以在任何控制器或库中使用,而无需重新定义

以下想法摘自Jamie Rumbelows优秀代码点火器手册:

只需在模型中创建一个数组:

$validate = array(
    array( 'field' => 'username', 'label' => 'Username', 'rules' => 'required,trim' ),
    array( 'field' => 'password', 'label' => 'Password', 'rules' => 'required|min_length[8]' )
);
然后实现一个方法,您可以使用该方法在保存()之前验证数据

现在,在控制器中,您可以使用:

if ($this->user->validate($user))
    save...

处理验证的唯一好的、枯燥的方法是在保存到数据库(换句话说,保存到模型中)之前,将验证规则放在最后的位置。通过这样做,相同的规则可以在任何控制器或库中使用,而无需重新定义

以下想法摘自Jamie Rumbelows优秀代码点火器手册:

只需在模型中创建一个数组:

$validate = array(
    array( 'field' => 'username', 'label' => 'Username', 'rules' => 'required,trim' ),
    array( 'field' => 'password', 'label' => 'Password', 'rules' => 'required|min_length[8]' )
);
然后实现一个方法,您可以使用该方法在保存()之前验证数据

现在,在控制器中,您可以使用:

if ($this->user->validate($user))
    save...

在/config下进行表单验证如何?在此文件中,创建一个包含所有规则的数组。我已经使用这个方法一段时间了,没有任何问题。在/config下进行表单验证怎么样?在此文件中,创建一个包含所有规则的数组。我使用这种方法已经有一段时间了,没有任何问题。