Codeigniter 在set_rules()中调用自定义帮助程序或库函数

Codeigniter 在set_rules()中调用自定义帮助程序或库函数,codeigniter,custom-validators,Codeigniter,Custom Validators,我试图在set_rules(…)行中调用自定义库的方法 我听说可以创建一个类(在应用程序/库中)来扩展本机Form_验证类,并在那里编写自定义方法 因此,我有/application/libraries/MY_Form_validation.php和以下代码 在控制器的功能中,我有 ... public function login() { $this->load->library('form_validation');

我试图在set_rules(…)行中调用自定义库的方法

我听说可以创建一个类(在应用程序/库中)来扩展本机Form_验证类,并在那里编写自定义方法

因此,我有/application/libraries/MY_Form_validation.php和以下代码

在控制器的功能中,我有

...
public function login() {                
        $this->load->library('form_validation');

        //echo ($this->form_validation->test_my_method(''))? "true":"false";      

        $this->form_validation->set_rules('username', 'Username', 'trim|test_my_method');
        $this->form_validation->set_rules('password', 'Password', 'required');

        if($this->form_validation->run())
        { echo "Success"; }
}
...
在set_rules()行中调用函数(test_my_method)时无法访问。你知道会出什么问题吗?。

谢谢。

我不明白您为什么不使用回调函数来扩展表单验证类来完成任务。有关详细信息,请参阅。如果您需要以某种方式改变类的本机行为,而不是针对此类任务,那么您可以扩展类。此外,如果您已经设置了一些自定义回调,则不需要包含其他规则(如trim、required等),因为您可以在自定义回调函数中检查该字段的所有方面。

我不明白您为什么不使用回调函数而扩展表单验证类来执行任务。有关详细信息,请参阅。如果您需要以某种方式改变类的本机行为,而不是针对此类任务,那么您可以扩展类。此外,如果您已经设置了一些自定义回调,则不需要包含其他规则(如trim、required等),因为您可以在自定义回调函数中检查该字段的所有方面。

运行此代码时是否收到错误消息?如果是什么?好的,这就是我缺少的,我调用函数时没有传递参数:始终保持用户名字段为空。但是即使函数没有定义为接受参数,如果字段为空,函数也不会被调用(请参见下面示例中注释的set_rules行)。所以我不得不将它与“required”一起使用。在自定义库中。。。函数唯一的_username(){//echo“test”$obj=&get_instance();$obj->load->model('users_model');$result=$obj->users_model->get_user by_username($obj->input->post('username');if($result->num rows()>0)返回false;else返回true;}…在控制器中。。。公共函数寄存器(){$this->load->library('form_validation');//$this->form_validation->set_rules('username'、'username'、'trim | unique_username');$this->form_validation->set_message('unique_username'、's已使用'))$this->form_validation->set_rules('password','password','required | min_length[7]);如果($this->form_validation->run())回显“Save data”;}……只需编辑您的问题并添加格式正确的代码,运行此代码时是否收到错误消息?如果是什么?好的,这就是我缺少的,我调用函数时没有传递参数:始终保持用户名字段为空。但是即使函数没有定义为接受参数,如果字段为空,函数也不会被调用(请参见下面示例中注释的set_rules行)。所以我不得不将它与“required”一起使用。在自定义库中。。。函数唯一的_username(){//echo“test”$obj=&get_instance();$obj->load->model('users_model');$result=$obj->users_model->get_user by_username($obj->input->post('username');if($result->num rows()>0)返回false;else返回true;}…在控制器中。。。公共函数寄存器(){$this->load->library('form_validation');//$this->form_validation->set_rules('username'、'username'、'trim | unique_username');$this->form_validation->set_message('unique_username'、's已使用'))$this->form_validation->set_rules('password','password','required | min_length[7]);如果($this->form_validation->run())echo'Save data'}…只需编辑您的问题并添加此代码,格式正确这是一个非常主观的评论,人们可以利用这种行为以可移植的形式构建自己的一组更高级的验证函数,以供多次重复使用,而不是将回调复制到每个项目中。我引用的是您上面的代码,它与“required”规则完全相同,在这种情况下不需要扩展本机类。这是一个示例。。。。你认为他真的在使用一个名为
test\u my\u method
的验证函数吗?这是一个非常主观的评论,人们可以利用这种行为以可移植的形式构建自己的一组更高级的验证函数,以供多次重复使用,而不是将回调复制到每个项目中。嗯,如果您构建了一些公共函数,那么情况就完全不同了。我引用的是您上面的代码,它与“required”规则完全相同,在这种情况下不需要扩展本机类。这是一个示例。。。。你以为他真的在使用一个名为
test\u my\u method
。。。???
...
public function login() {                
        $this->load->library('form_validation');

        //echo ($this->form_validation->test_my_method(''))? "true":"false";      

        $this->form_validation->set_rules('username', 'Username', 'trim|test_my_method');
        $this->form_validation->set_rules('password', 'Password', 'required');

        if($this->form_validation->run())
        { echo "Success"; }
}
...