1

これは、codeigniter の単純なログイン検証スクリプトです。問題がわかりません。ユーザー ガイドを確認しましたが、コールバックが機能しません。

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

}
4

2 に答える 2

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サフィックス likecallback_email_checkとコールバック メソッドを追加email_checkして確認します。詳細はこちらCodeIgniter コールバック

于 2013-02-25T08:52:38.160 に答える
0

私はこのような混乱に巻き込まれ、長い一日溺れそうになりました。ここに問題がありました。私はモデルで作業していましたが、コールバックに必要な関数がモデル内で機能していなかったことがわかりました。これを修正するには:

コールバックに使用している関数が、モデルではなくコントローラーにあることを確認してください。

それは魔法のように機能しました。理由はわかりませんが、コールバックのケースは修正されました。

マニュアルにはサフィックスについて特に何も書かれていないので、チェックサフィックスを追加してもそれほど違いはありません。プレフィックス コールバックは、決して省略してはならないことを知っています。_check サフィックスなしで機能するコールバックがいくつかあります。

マニュアルには次のように書かれています。

コールバックを呼び出すには、ルールのプレフィックスとして「callback_」を付けて、関数名をルールに入れるだけです。コールバック関数で追加のパラメータを受け取る必要がある場合は、「callback_foo[bar]」のように、関数名の後に角括弧で囲んで追加するだけで、コールバック関数の 2 番目の引数として渡されます。

私が気づいたのは、マニュアルの例では、モデルではなくコントローラーにコールバック関数があったことです。

于 2013-02-25T10:02:58.563 に答える