Codeigniterのページでユーザーオブジェクトを利用可能にする方法は?
-
24-10-2019 - |
質問
私はCodeigniterをかなり初めてであり、ユーザー認証のためにIon Authを使用しています。 ION AUTHライブラリを使用すると、次のようなユーザーオブジェクトを取得します。
$user = $this->ion_auth->get_user();
echo $user->email;
ユーザーがログインしている場合は、$ユーザーオブジェクトを(コントローラーのいずれか)で使用できるようにします。これどうやってするの? (私はcodeigniter2を使用しています)
解決
私のこのブログ投稿 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()
他のヒント
通常、セッションでこのようなものをキャッシュしますが、私はほとんどの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
. 。このパターンに従うと、キャッシュに頼らずにすべてのページ(コントローラーを拡張する)で取得できます。