1

私は CodeIgniter を初めて使用し、ユーザー認証に Ion Auth を使用しています。Ion Auth ライブラリを使用すると、次のようなユーザー オブジェクトを取得できます。

  $user = $this->ion_auth->get_user();
  echo $user->email;

ユーザーがログインしている場合、$user オブジェクトを任意のページ (任意のコントローラー) で使用できるようにしたいと考えています。これどうやってするの?(CodeIgniter 2 を使用しています)

4

2 に答える 2

6

私のこのブログ投稿では、特に Ion_Auth を使用して、アプリケーション全体 (ビューを含む) が現在のユーザーの情報にアクセスできるようにする方法について詳しく説明しています。

短いバージョン... (特に当面のトピックについて)

MY_Controller.phpこれをファイルに追加する

class User_Controller extends CI_Controller {

    protected $the_user;

    public function __construct() {

        parent::__construct();

        if($this->ion_auth->logged_in()) {
            $data->the_user = $this->ion_auth->get_user();
            $this->the_user = $data->the_user;
            $this->load->vars($data);
        }
        else {
            redirect('/');
        }
    }
}

次に、アプリケーションで次のようにコントローラーを作成します

class App_Controller extends User_Controller {

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

    function index() {
        //do stuff
    }
}

次に、コントローラーだけでなく、すべてのビューにアクセスできるようになり$this->the_userます$the_user$this->load->vars()

于 2011-03-15T20:12:51.933 に答える
2

通常、セッションでこのようなものをキャッシュしますが、ほとんどの CI アプリではそれを避けています。

例: ユーザーをログイン (ユーザー データをキャッシュ) し、プロファイル ページで電子メールを更新します。ここで、キャッシュをリロードする必要があります。他の多くのことがこのリロードを促進する可能性があります。通常、私がこれ以上キャッシュするのは ID だけです。次に、あなたがしていることを実行し、必要なページでユーザーのデータを取得します。

私が見つけた助けの 1 つは、ベース コントローラーを使用することです。たとえば、RegisteredUserController があります。すべてのアクションでユーザーがログインする必要があるコントローラーは、これを拡張します。そうすれば、ログインをチェックしたり、(コンストラクター内の) 1 つの場所でユーザー データを取得したりすることができます。例えば:

class RegisteredUserController extends CI_Controller {
    var $user;

    function  __construct()  {
        parent::__construct();
            $this->user = $this->ion_auth->get_user();
        }
}

次にRegisteredUserController、単なるコントローラーの代わりに拡張するコントローラーは、 を使用してユーザーに到達できます$this->user。このパターンに従うと、キャッシュに頼らずに (コントローラーを拡張する) すべてのページでそれを取得できます。

于 2011-03-15T19:19:17.470 に答える