0

私はCodeIgniterを使用しており、ユーザーが現在のコントローラーにアクセスできる場合とできない場合を知るために、ある種のフィルターを作成したいと考えています。

誰かがこれを別の方法で実装する方法を知っているなら、素晴らしいですが、私が考えていた(そしてやろうとしていた)ことは次のとおりです:

CI_Controller-これは基本的なCodeIgniterコントローラークラスです

MY_Controller-CI_Controllerを拡張する私が使用する基本的なコントローラー

[コントローラー]-任意の「物理的」コントローラー

私がやろうとしたことは:

MY_Controller.php

class MY_Controller extends CI_Controller{

    private static $namespace = null;

    private static $permission = array('site', 'settings');

    public function __construct(){
        if ((!isset($_SESSION['user'])) && (in_array(__CLASS__, $permission))){
            throw new Exception('Unauthorized');
        }
        parent::__construct();
    }

}

明らかに、これは機能しません。CLASSは常にMY_Controllerのクラスであり、子オブジェクトのクラスではないためです...そしてNAMESPACEも機能しません。

誰かが何か考えを持っていますか?Idは、このコードスニペットを他のすべてのクラスに配置し始めるのが本当に嫌いであり、後でさらに複雑なことを行うためにフィルタリングが必要になるためです...

4

3 に答える 3

0

次の方法で解決しました...単にコンストラクターで、現在のクラスを定義しました

class MY_Controller extends CI_Controller{
    private static $permission = array('site', 'settings');
    public function __construct($currentController = __CLASS__){
        if ((!isset($_SESSION['user'])) && (in_array($currentController , $permission))){
            throw new Exception('Unauthorized');
        }
        parent::Controller();
    }
}

物理コントローラーを呼び出すときは、次のように記述します

class PhysicalController extends MY_Controller{

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

}
于 2012-05-30T13:44:37.460 に答える
0

今のところ答えがないので、この提案が役立つかもしれません。ただし、Modular Extensions - HMVC を使用するのは別のアプローチです...

このように、ユーザーのログイン、セッションの状態の確認、ユーザーのログアウトなどを行うためのメソッドを保持するコントローラーを備えたモジュール「ログイン」を使用できます。

他の各モジュールで、モジュールのログインをロードし、ステータスを確認し、必要に応じてリダイレクトできます...

CodeIgniter From Scratch: Day 6 – Login in Scratch の方法を示すチュートリアルHMVC: an Introduction and Application I follow on nettuts があります。たぶんそれが役立ちます。古いバージョンの codeigniter を使用しているため、いくつかの問題がありました。だから多分このスレッドが役に立ちます。

それはあなたがやろうとしている方法ではありませんが、役立つかもしれません!

于 2012-05-20T20:05:29.910 に答える
0

私はそれを試していませんが、このフォーラムで見たものがあなたのために働いているかもしれません. 予測されるコードは次のとおりです。

class MY_Controller extends Controller{
    private static $permission = array('site', 'settings');
    public function __construct(){
        if ((!isset($_SESSION['user'])) && (in_array(__CLASS__, $permission))){
            throw new Exception('Unauthorized');
        }
        parent::Controller();
    }
}

しかし、その後、使用する必要があります

class My_controller extends MY_Controller

それ以外の

class My_controller extends Controller
于 2012-05-20T21:09:23.847 に答える