阅读表单验证文档后:
http://ellislab.com/codeigniter%20/user-guide/libraries/form_validation.html#callbacks
我被认为必须在控制器内定义所有自定义表单验证回调。我可以想到几个实例,其中这样的函数应该在辅助文件中定义,因此根据CI设计加载到全局命名空间中。这可能吗?似乎CI有一些像这样的内置限制,很难改变或解决。
答案 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已经推出了几个你无法改变的核心功能。
在您的情况下,您需要: