Привет всем, это мой первый проект CI.
У меня есть простая функция проверки формы в моей модели.
function verify_login() { //This method will have the credentials validation $this->load->library('form_validation'); $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean'); $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database'); var_dump($this->form_validation->run()); die; if ($this->form_validation->run() == FALSE) { //Field validation failed. User redirected to login page $this->load->view('login_view'); } else { //Go to private area redirect('home', 'refresh'); } }
Это работает только тогда, когда оно находится в контроллере, но не в модели. Когда я пытаюсь передать переменные от контроллера к функции в модели, переменные получаются, но не будут обрабатываться.
Может кто-нибудь просветить меня? Спасибо.
его штраф, чтобы сделать вашу проверку формы в модели. Но вы хотите, чтобы проверка вернула True или False на ваш контроллер. Не вызывать вид. Так что
// in your Model lets call it Users function verify_login() { $this->load->library('form_validation'); $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean'); $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database'); if ($this->form_validation->run() == FALSE) { return FALSE ; } else { return TRUE; } } // Your callback function // in Controller function verify(){ if( $this->users->verify_login() == FALSE ){ // $this->errormessage will be available in any view that is called from this controller $this-errormessage = "There was an error with your Log In. Please try again." ; $this->showLogin() ; } else { // set a session so you can confirm they are logged in on other pages $this->setLoginSession($this->input->post('username', TRUE)) ; $this->showUserHome(); } }
Еще одна вещь, о которой нужно подумать – часто люди знают свое имя пользователя, но испортили свой пароль. Поэтому, если вы проверите их отдельно, вы можете соответствующим образом настроить сообщение об ошибке. И если вы проверяете имя пользователя и нет никаких результатов – вам не нужно проверять пароль, и в сообщении об ошибке вы можете сказать им, что нет имени по этому имени.
Моя самая большая рекомендация для вас – не делать подобные валидации в вашей модели. Если вы проверяете в своей модели, это должно быть напрямую против значения базы данных, а не формы.
Пожалуйста, дайте мне знать, если это решит вашу проблему, если не прокомментировать, и я отредактирую свой ответ.
ОБНОВЛЕНИЕ: Пожалуйста, проигнорируйте некоторые из вышеперечисленных, поскольку я ушел с теории, а не факт 🙂
Мне нужно углубиться в ядро CI, чтобы получить представление о том, что с этим не так. Сам код выглядит нормально. Единственное, что я вижу, это то, что ваш обратный вызов может отсутствовать в вашей модели и только в вашем контроллере. Повторяя ниже, я не считаю это хорошим использованием модели.
Документы по проверке