0

私はCIプログラマーではなく、ただそれを学ぼうとしています。たぶんこれは間違ったアプローチです、アドバイスしてください。

私のコントローラー(サブディレクトリにはありません):

class Users extends CI_Controller {

    function __construct() {
        parent::__construct();
    }

public function index($msg = NULL) {

        $this->load->helper(array('form'));

        $data['msg'] = $msg;

        $this->load->view('user/login' , $data);

    }

   public function process_logout() {
        $this->session->sess_destroy();
        redirect(base_url());
    }

}

そしてログインのためのルート:

$route['user/login'] = 'users/index';

問題は、ログアウトしたいときに404が表示されることです。これは、ルートに404がないためです。

$route['user/process_logout'] = 'users/process_logout';

そして私の見解では<a href="users/process_logout">logout</a>

私がそれを追加すると、それは機能します、そしてそれはすべてのためのルートを追加するのは愚かです。私が間違っていること、アドバイスしてください。

ありがとうございました

4

1 に答える 1

2

index()関数にログイン機能を実装しようとしている理由がわかりません。ただし、CIを学習しているとおっしゃっていたので、_remap()関数について説明しています。

それ以前は。次のルーティングを試すことができます。

$route['user/:any'] = 'users/$1';
$route['user/login'] = 'users/index';

コントローラセグメントの直後に値を取得する場合は、_remap()関数を使用する必要があります。この関数を使用すると、ルーティングの問題を解決できる可能性があります。つまり、ルーティングを設定する必要はありません。_remap()関数を使用してコードコントローラー'users'を実装しましょう。

class Users extends CI_Controller {

    private $sections = array('login', 'logout');

    function __construct() {
        parent::__construct();

    }

   public function _remap($method)
   {
        $section = $this->uri->segment(2);

        if(in_array($section, $this->sections))
            call_user_func_array(array($this, '_'.$section), array());

        else show_404(); // Showing 404 error
   }

   private function _login() 
   {
        $msg = $this->uri->segment(3);

        $this->load->helper(array('form'));
        $data['msg'] = $msg;
        $this->load->view('user/login' , $data);
    }

   public function _logout() {
        $this->session->sess_destroy();
        redirect(base_url());
    }

}
于 2013-03-21T01:59:25.907 に答える