php – Codeigniter中的回调函数,在表单验证期间具有多个参数
发布时间:2020-12-13 13:45:34 所属栏目:PHP教程 来源:网络整理
导读:在Codeigniter中: 这是我用于验证的回调函数: public function has_match($password,$username){ if (0) { // user exists return true; } else { $this-form_validation-set_message('has_match','Invalid Username/password entered ' . $password . ' '
在Codeigniter中:
这是我用于验证的回调函数: public function has_match($password,$username){ if (0) { // user exists return true; } else { $this->form_validation->set_message('has_match','Invalid Username/password entered ' . $password . ' ' . $username); return false; } } 以下是验证规则: $this->form_validation->set_rules('username','Username','required'); $this->form_validation->set_rules('password','Password','required|callback_has_match[username]'); 任何人都可以告诉我在调用回调函数时我在做错了什么,因为我无法获取用户名字段的值而且它一直显示’用户名'(在回调中的变量$username内)?
您的代码按预期工作.您基本上总是使用字符串username作为参数调用回调方法has_match.我认为你希望这可以转化为:
callback_has_match[$username] 因此,当您访问has_match()方法时,您可以访问$username的值.然而,这不是回调方法的工作方式.您在其中设置的参数是一个字符串,它是硬编码的,就像您为min_length [10]添加规则时一样 – 它不是PHP变量的值.一个简单的修复,我没有测试,但怀疑工作是: $this->form_validation->set_rules('password','required|callback_has_match[' . $username . ']'); 但是上面的代码不干净,在我看来似乎设计不好. 既然我们已经发现了代码的问题,我知道它超出了问题的范围,但我想指出它 – 我发现这更像是一个设计问题.为什么要在密码字段的回调中检查用户名/密码对? 请记住,您正在验证表单,不应将其与模型工作混淆.表单不关心提供的用户名/密码组合是否正确,它应该只看两个字段是否都已正确提供,如果是,它应该对它做一些事情. 我会将您的代码调整为: $this->form_validation->set_rules('username','required|callback_has_match[username]'); if ($this->form_validation->run() != FALSE) { $validLogin = $this->muser->checkLogin($username,$password); if ($validLogin) { //Username/password combo exists in DB,save in session or whatever. } else { //Username/password combo does not exist in DB,show an error. } } else { //Code for when form fields have not been provided correctly. } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |