可以在CodeIgniter中的全局范围中定义自定义表单验证回调

时间:2014-01-14 15:33:27

标签: php codeigniter validation

阅读表单验证文档后:

http://ellislab.com/codeigniter%20/user-guide/libraries/form_validation.html#callbacks

我被认为必须在控制器内定义所有自定义表单验证回调。我可以想到几个实例,其中这样的函数应该在辅助文件中定义,因此根据CI设计加载到全局命名空间中。这可能吗?似乎CI有一些像这样的内置限制,很难改变或解决。

3 个答案:

答案 0 :(得分:3)

你实际上可以定义" global"验证规则自己。只需扩展CI_Form_Validation类。

class MY_Form_validation extends CI_Form_validation {

此类必须放在您的application / libraries文件夹中。在那里添加验证功能,CI将获取您的课程版本。在这种情况下,您不需要在规则上添加callback_前缀。

$this->form_validation->set_rules('field', 'Field', 'your_function');

答案 1 :(得分:1)

好好想一想 - 如果只在你验证表单时调用回调 - 那么它不需要以任何方式“全局”。

有些人致力于在控制器中进行验证,因此他们主张拥有“胖控制器”。我的建议是在模型中进行表单验证。一个优点是,如果您需要从不同的地方调用表单验证 - 这是您通过询问帮助程序所暗示的 - 您可以从任何控制器(或其他模型)非常轻松地调用验证。所以你不需要加载一个单独的帮助文件 - 模型的名称和方法应该清楚说明验证的内容。

另一个优点是,如果您更改或更新表单以及验证和回调 - 这一切都发生在模型中。控制器代码不会更改,如果您从不同的地方调用此验证,这也会有所帮助。

这是您可能会发现有用的另一个回复: Codeigniter Form Validation in Model

答案 2 :(得分:0)

你不能这样做ci已经推出了几个你无法改变的核心功能。

在您的情况下,您需要:

  1. 您需要将ci核心验证类包含在您的帮助程序中
  2. 然后创建使用它的对象。