1

私はMVCモデルのCIに非常に慣れていません。

3 つのビューで構成される単純なページがあります。ヘッダー、コンテンツ、フッター。コンテンツはサイト全体で一意になりますが、ヘッダーとフッターはどのページでも同じです。

私のヘッダーにはログインフォームがあります。したがって、サイト全体にログインフォームがあります。差分モデルを持つすべてのページに表示されるため:

ヘッダーが使用されるすべてのモデルでログインスクリプトを書くのは好きではないので、ユーザーにログインするためのスクリプトをどのように、またはどこに書くのでしょうか...

多分別の例:

それが明確でない場合は、別の例を試します。サイトがあるとします。その中で、すべてのページのフッターであるビューをロードします。フッターにはフォームが含まれています。そのフォームを使用してデータを投稿すると、そのデータはどこに送られますか?

そのフォームからのすべての投稿を処理する専用の PHP ファイルに移動することを示しますか、それとも現在のページのコントローラーに移動する必要がありますか?

私がはっきりしていたことを願っています。繰り返しますが、1日前にCIとMVCを使い始めました。ご指導いただければ幸いです。

4

2 に答える 2

1

そのフォームを使用してデータを投稿する場合、そのデータはどこに送信すればよいですか?

すべてのページ (コントローラー) にロジックを記述しないでください。あなたがすべきことは、Accountsユーザーロギングを管理するための別個のコントローラー ( など) を作成することです。

ログインフォームは、データをaccounts/loginURL に投稿する必要があります。ただし、前のページに戻るには、現在の URL をセッションに として保存する必要がありますreferer

uri_string();そのためには、必要な各ページのセッションに保存するだけです。

$this->session->set_userdata(array(
    'referer' => $this->uri->uri_string()
));

ユーザーを前のページにリダイレクトする必要がない場合は、無視してください。

以下の例は、目標を達成する方法を示しています。

class Accounts extends CI_Controller {

    public function login()
    {
        $config = array(
            // Write your validation rules here
        );

        $this->load->library('form_validation');
        $this->form_validation->set_rules($config);

        // Check whether form is submitted
        if (isset($_POST['submit'])) {

            if ($this->form_validation->run() == FALSE) {
                $data['login_errors'] = validation_errors();
                // Store validation errors in session
                // to display on every page needed
                $this->session->set_userdata($data);
            } else {

                // Login process
                // Set user detail in session

                // Redirect to previous page after login
                if ($referer = $this->session->userdata('referer')) {
                    $this->session->unset_userdata('referer');
                } else {
                    $referer='';
                }

                redirect(base_url().$referer);  
            }

        }
    }

    public function logout()
    {
        // Destroy the session
        $this->session->sess_destroy();
        redirect(base_url());
    }
}
于 2013-07-29T08:37:44.543 に答える
0
  1. グローバル関数を使用してモデルを作成する
  2. 「モデル」の下の設定 autoload.php に関数を入れます
  3. このモデルをロードせずにどこからでも呼び出すことができます
于 2013-07-29T01:38:24.890 に答える