Cannot show callback validation message in a model

38 views Asked by At

I'm using codeigniter 3 to build a simple login form but my callback validation message didn't work. Here is my code:

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();
    }
}

I use that model in my controller for validating login form input

Welcome.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');
    }
}

The callback validation seems to work, but the message is like this:

Unable to access an error message corresponding to your field name Username.(username_exist)

The callback validation works if I put username_exist function in my controller. Can't we do it in a model? I want to make the controller as clean as possible. Please help.

0

There are 0 answers