1

我正在使用 codeigniter 3 构建一个简单的登录表单,但我的回调验证消息不起作用。这是我的代码:

LoginForm_model.php

class LoginForm_model extends CI_Model 
{
    private $username;
    private $password;

    protected $validationRules = [
        'username' => 'required|callback_username_exist',
        'password' => 'required',
    ];

    public function username_exist($str)
    {
        $this->load->model('Reseller_model', 'reseller');
        $reseller = $this->reseller->findOne(['username' => $this->input->post('LoginForm')['username']]);
        if (!empty($reseller)) {
            return true;
        }
        $this->form_validation->set_message('username_exist', 'Username tidak ditemukan');
        return false;
    }

    public function validate() {
        $modelName = explode("_", get_class($this));
        foreach($this->validationRules as $field => $validationRule) {
            $this->form_validation->set_rules($modelName[0].'['.$field.']', $this->getLabels($field), $validationRule);
        }

        return $this->form_validation->run();
    }
}

我在控制器中使用该模型来验证登录表单输入

欢迎.php

class Welcome extends CI_Controller {

    public function index()
    {
        $this->load->model("Loginform_model", "loginform");

        if (NULL !== $this->input->post('LoginForm')) {

            if ($this->loginform->validate()) {
                echo "All Set!";
            }
        }

        $this->load->view('login');
    }
}

回调验证似乎工作,但消息是这样的:

无法访问与您的字段名称用户名对应的错误消息。(用户名存在)

如果我将 username_exist 函数放在我的控制器中,则回调验证有效。我们不能在模型中做到这一点吗?我想让控制器尽可能干净。请帮忙。

4

0 回答 0