サイトのセクションにマップするコントローラーがあり、その中のすべてのページ (メソッド) は、ユーザーがログインしている場合にのみ表示されます。それ以外の場合は、ログイン画面にリダイレクトされる必要があります。
これを動作させるために、私は次の操作を実行しました:
function index() {
if ($this->session->userdata('logged_in')) {
$this->load->view('main');
} else {
redirect('/login');
}
}
function archive() {
if ($this->session->userdata('logged_in')) {
などなど...各メソッドでそのチェックを繰り返します。コントローラ内の複数またはすべてのメソッドに対してこのチェックを 1 回実行する最も簡単な方法は何ですか?
ベストアンサー1
メソッド内でコードを実行すると、コントローラーのすべてのメソッドでコードを実行できます__construct()
。
function __construct()
{
parent::__construct();
if ( ! $this->session->userdata('logged_in'))
{
// Allow some methods?
$allowed = array(
'some_method_in_this_controller',
'other_method_in_this_controller',
);
if ( ! in_array($this->router->fetch_method(), $allowed)
{
redirect('login');
}
}
}
全体へのアクセスを制限したい場合は、「許可された」ビットを削除できますが、ベース コントローラーを作成するなど、これを行うにはよりよい方法があります。
// Create file application/core/MY_Controller.php
class Auth_Controller extends CI_Controller {
function __construct()
{
parent::__construct();
if ( ! $this->session->userdata('logged_in'))
{
redirect('login');
}
}
}
次に、制限されたコントローラーAuth_Controller
を の代わりに拡張しますCI_Controller
。これで、コントローラーがロードされるたびにコードが実行されるようになります。
コアクラスの拡張に関する詳細情報:http://www.codeigniter.com/user_guide/general/core_classes.html#コアクラスの拡張