2016-09-04 4 views
1

のために、私は、コードを次のように私のコントローラのコンストラクタメソッドにログインチェックを定義した:CodeIgniterの、ログインチェックをスキップコンストラクタで定義し、特定のアクション

if($this->session->userdata('log_in')== false){ 
    redirect(); //function for redirect to login page 
} 

しかし、私は特定のアクション

ため、このログインチェックを呼び出したいいけません

(例えば、public function viewProduct()

同じコントローラです。どうやってやるの?

答えて

1

あなたは今、それがviewProduct方法でチェックされていないことになる

$method = $this->router->fetch_method(); 
if($this->session->userdata('log_in')== false && $method !== 'viewProduct'){ 
    redirect(); //function for redirect to login page 
} 

ようであれば条件に、コンストラクタであなたのメソッド名を指定することができます。

+1

申し訳ありませんが、あなたの答えは私が私の書き込みを開始したときに投稿されていません。同じ答えは実際にはルータというよりむしろセグメントを使用しましたが、これは同じことになります。 – PaulD

0

できません。個々のコントローラメソッド内でログインチェックを実行するか、コンストラクタでログインチェックを行わない独自のコントローラにビュー製品を配置することができます。これについて考える

は、私はあなたがこのようなコンストラクタ内のセグメントをチェックすることができたとします

if (($this->session->userdata('log_in')== false) AND ($this->uri->segment(2, '') != 'view_product')) 
    redirect(); //function for redirect to login page 
} 

uri_segmentがここで説明されています。これはしかし素晴らしいアイディアだhttp://www.codeigniter.com/user_guide/general/urls.html#uri-segments

わかりません。私は最初の2つの提案の1つを自分で行います。しかしそれは好みの問題です。

0

私は最良の方法はコンストラクタではなく、コントローラのメソッドを渡すことだと思います。コンストラクターはコントローラーのロード中に最初に実行されるので、それを処理するのは良い方法ではありません。しかし、特定のフックはあなたのために働くことができますが、将来のコーディングのための標準的なプラクティスに本当に従うべきです。

関連する問題