2013-02-25 4 views
1

Это простой скрипт авторизации входа в codeigniter. Я не могу понять проблему. Я прошел через руководство пользователя, но обратный вызов просто не работает.calligniter callback не работает?

public function form_validation() 
{ 
    $this->load->library('form_validation'); 
    $this->form_validation->set_rules('username', 'Username', 'required|trim  |alpha_numeric'); 
    $this->form_validation->set_rules('password', 'Password', `enter code here` 'required|trim |xss_clean'); 
    $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|xss_clean|callback_validate'); 
    if ($this->form_validation->run()) { 
     echo "validated but not logged"; 
    } else { 
     $this->load->view('errors/formerror'); 

    } 
} 

public function validate() 
{ 
    $this->load->model('model_users'); 
    if ($this->model_users->can_login()) { 
     echo "Logged"; 
    } else { 
     $this->form_validation->set_message('validate', "Incorrect username/password"); 
    } 

} 

ответ

1
public function form_validation() 
{ 
    $this->load->library('form_validation'); 
    $this->form_validation->set_rules('username', 'Username', 'required|trim|alpha_numeric'); 
    $this->form_validation->set_rules('password', 'Password', 'required|trim |xss_clean'); 
    $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|xss_clean|callback_email_check'); 
    if ($this->form_validation->run()) { 
     echo "validated but not logged"; 
    } else { 
     $this->load->view('errors/formerror'); 
    } 
} 

public function email_check($email) 
{ 
    $this->load->model('model_users'); 
    if ($this->model_users->can_login($email)) { 
     echo "Logged"; 
     return true; 
    } else { 
     $this->form_validation->set_message('email_check', "Incorrect username/password"); 
     return false; 
    } 
} 

Добавить _check суффикс как callback_email_check и обратного вызова метода email_check и проверить. Узнать больше здесь CodeIgniter Callbacks

+0

Вы забыли добавить 'return true' и' return false' в метод 'email_check' – Winston

+0

И нужно удалить' echo' :) – Winston

+0

@Winston, то есть как было в вопросе. Я думаю, что вопросник рассмотрит. может быть, он хочет узнать, работает ли этот метод ... –

0

Я попал в такой беспорядок, как этот, и почти утонул в течение долгого дня. Вот проблема. Я работал с моделью, и оказалось, что функция, необходимая для обратного вызова, не работает в модели. Чтобы исправить это:

Убедитесь, что функция, которую вы используете для обратного вызова, находится в контроллере, а не в модели.

Он работал как волшебство. Я не могу понять, почему, но он исправил мой случай обратного вызова.

Добавление Проверка суффикса не имеет особого значения, поскольку в руководстве ничего не говорится о суффиксах в частности. Префикс callback - это то, что я знаю, никогда не следует забывать. У меня есть несколько обратных вызовов, которые работали без суффикса _check.

Вот что руководство говорит:

Чтобы вызвать функцию обратного вызова просто поставить имя функции в правило, с «callback_» в качестве префикса правила. Если вам нужно получить дополнительный параметр в вашей функции обратного вызова, просто добавьте его обычно после имени функции между квадратными скобками, как в: «callback_foo [bar]», затем он будет передан как второй аргумент вашей функции обратного вызова

То, что я заметил, было примером, приведенным в руководстве, была функция обратного вызова в контроллере, а не в модели.

Смежные вопросы