0

私はフックにあるこの機能を持っています:

public function checkIfLogged() {
    $this->CI = & get_instance();
    if(!$this->CI->session->userdata('logged') ){
        $this->CI->load->view('common/home');
        exit;
    }
}

私の問題は、$this->CI->load->view('common/home');実際にはテンプレート ファイルがまったく読み込まれないことです。理由はありますか?

post_controller_constructor フックを使用しています。

ありがとう、ピーター

4

2 に答える 2

2

実際の問題は、の使用でしexitた。ビューをロードすると、その出力が Output クラス ( system/core/Output.php) に追加されます。最終的なビュー データは、 にある行によってブラウザに送信 (エコー)$OUT->_display();されsystem/core/CodeIgniter.phpます。

そこにを投げたのでexit、スクリプトが停止し、その表示メソッドが呼び出されることはありません。

このフックで何をしようとしているのかはよくわかりませんが (ユーザーがログアウトした場合に指定されたページを表示するように見えます)、最も簡単な解決策は、ビューの出力を返してエコーすることですフックから直接。

public function checkIfLogged() {
    $this->CI = & get_instance();
    if(!$this->CI->session->userdata('logged') ){
        exit($this->CI->load->view('common/home', null, true));
    }
}

display_overrideフックが特定のセッション データをチェックする前にコントローラーのコード全体が実行されるため、フックの使用はお勧めしません(また、コントローラーがそのセッション データを上書きして、予期しない結果が生じる可能性もあります)。

フックの代わりにベース コントローラー (MY_Controller) の使用を検討することもできます。状況や必要な機能によっては、より適切な場合があります。

于 2013-05-13T22:37:01.240 に答える