2

CodeIgniter にログイン フォームがあるとします。個々の入力に対して検証ルールを設定できますが、モデル/コントローラー レベルのエラーとメッセージをスローする方法はありますか?

具体的には、以下のメソッドが TRUE を返さない場合、「電子メール アドレスまたはパスワードが正しくありません」というメッセージとともにフォームを再表示する必要があります。現在、コントローラはビ​​ューと set_value()s をリロードするだけです

public function authorize_user()
{
    $this->db->where('email', $this->input->post('email'));
    $this->db->where('password', $this->input->post('password'));

    $q = $this->db->get('users');

    if($q->num_rows() == 1){
        return true;
    }
}

おそらく私はこれを考えすぎているので、そのエラーメッセージをメール入力に添付するだけでよいでしょうか?

4

1 に答える 1

3

これを行うには、コールバック関数を使用できます。手順は次のとおり
です。 1.authorize_user()関数は、ルールを設定したコントローラー内にある必要があります。
2. 次のようなコードを追加して、「コールバック」ルールを作成します。

$this->form_validation->set_rules('email', 'email', 'callback_authorize_user['.$this->input->post("password").']');

コールバック関数のパラメーターを追加したことに注意してください。これらの種類の関数は、 の最初の引数によって決定されるパラメーターを自動的に受け取りますset_rules()。この場合、コールバック関数に自動的に渡される引数は電子メールです。さらに、パスワードを 2 番目のパラメーターとして渡します。

3.それぞれのパラメーターを関数に追加します。

public function authorize_user($email,$password)
{
   //As I said before, the email is passed automatically cause you set the rule over the email field.
    $this->db->where('email', $email);
    $this->db->where('password', $password);

    $q = $this->db->get('users');

    if($q->num_rows() == 1){
        return true;
    }
}

詳細: http://codeigniter.com/user_guide/libraries/form_validation.html#callbacks

それが役に立てば幸い!

于 2012-07-31T01:11:36.037 に答える