0

codeigniter でデフォルトのコントローラーを変更したいのですが、可能ですか? ゲストには別のコントローラーを表示し、メンバーには別のコントローラーを表示したい

if($this->cuser->usercode()){
//loading default controller

$route['memebers_welcome'];

}else{

$route['guests_welcome'];

}

可能であればアドバイスしてください。そうでなければ、リダイレクト機能を使用する必要がありますが、これは良い習慣ではないと思います。

4

3 に答える 3

3

おそらく、この問題に対する別の視点。ユーザーがログインしているかどうかに基づいてコントローラーを選択しようとする代わりに、「ようこそ」コントローラーに、ログインしているユーザーとログインしていないユーザーの別のビューをロードさせることは非常に一般的です。

class Welcome extends CI_Controller {
    public function index() {
        # ...
        if ($this->cuser->usercode()) {
            $this->load->view('members_welcome');
        } else {
            $this->load->view('guests_welcome');
        }
    }
    # ...
}

別の方法として、個別の関数を作成する意味のある完全に個別のロジック セットがある場合は、ページをリロードする必要なく、別のコントローラー メソッドを簡単に呼び出すことができます。

class Welcome extends CI_Controller {
    public function index() {
        if ($this->cuser->usercode()) {
            $this->_members_welcome();
        } else {
            $this->_guests_welcome();
        } 
    }

    private function _members_welcome() {
        # ... do stuff for members
    }

    private function _guests_welcome() {
        # ... do stuff for guests
    }
}

不必要なオーバーヘッドやページの読み込みを引き起こしたくないため、実際にユーザーを誘導するこの方法を使用する方がはるかに優れています。

于 2012-09-22T03:05:31.120 に答える
1

私はそうは思わない。コントローラーを変更することはできません。まず、ユーザーがログインしているかどうかを確認する必要があり、コントローラー内からこれを確認できます。これが最も簡単で適切な方法です。

したがって、両方のタイプのユーザーに対してデフォルトのコントローラーを保持し、ユーザーのタイプを確認して、ユーザーがメンバーでない場合は、そのコントローラー/ページから新しいコントローラー/ページにリダイレクトします。これは、デフォルト コントローラーのコンストラクター関数で確認できます。

于 2012-09-22T02:58:04.550 に答える
1

はい、できます。そして、コードを再利用する良い方法です。

独自のコントローラーを作成する

たとえば、ユーザー用のコントローラーと管理者用のコントローラーが必要な場合などです。application/coreフォルダーに移動し、そこに作成します。

class UserController extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        if ( !is_logged() )
        {
            show_error('get out of here') // sorry, you are not logged
        }
        // load necessary libraries or helpers for logged user

    }
}

また、管理領域のコントローラーが必要な場合は、次のように実行できます。

class AdminController extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        if ( !is_admin() )
        {
            show_error('only for admins') // sorry, you are not admin
        }
        // load necessary libraries or helpers for admin

    }
}

コントローラーをシステムにロードする

コントローラを CI システムの一部としてロードするには、それらが存在する場所を指定する必要があります。したがって、application/config/config.phpファイルの最後に次のように記述します。

function __autoload($class)
{
    if (strpos($class, 'CI_') !== 0)
    {
        if (file_exists($file = APPPATH . 'core/' . $class . EXT))
        {
            include $file;
        }

        else if (file_exists($file = APPPATH . 'libraries/' . $class . EXT))
        {
            include $file;
        }
    }
}

コントローラーをテストする

これで、上記のコントローラーの 1 つを拡張して、Web サイトの領域に応じて使用できるようになりました。

class Logout extends UserController{

また

class EditUser extends AdminController{
于 2012-09-23T04:46:44.810 に答える