2016-04-17 3 views
1

リクエストがクライアントに送信された後に作業したいコードがいくつかありますので、コントローラ内からpost_systemフックをシステムに追加したいので、 post_systemフックは、特定のメソッドが呼び出されたときにのみ実行されます。CodeIgniterのコントローラメソッドの内側からpost_systemフックを追加する

CodeIgniterこれをいくつかの回避策で使用できますか?

私のバージョンは3.0rc3

+0

のコード

$hook['pre_controller'] = array( 'class' => 'PreLogin', 'function' => 'auth', 'filename' => 'PreLogin.php', 'filepath' => 'hooks' ); 

でアプリケーション/設定/ hooks.phpにこの行を追加する必要がありますそれ?エラーはありますか?予期しない動作? – Tpojka

答えて

0

それは可能なはずです。 1つのアプローチは、ドキュメントに記載されているようにpost_systemフックを設定することです。$config['enable_hooks'] = TRUE;、フックをapplication/config/hooks.phpに定義し、フッククラスを作成します。

post_systemフックを使用するコントローラでは、フック関数を実際に実行するかどうかを決定するために使用されるvarを定義します。コンストラクタでデフォルト値をFALSEに設定し、あなたが気に留めている特定のメソッドでTRUEに設定します。

post_system_hook関数でこのvarの値を確認してください。コントローラーがフックする必要があるコントローラーであることを確認することから始めることができます。クラスが「ようこそ」であると仮定しよう。

post_system_hook_function(){ 
    //the type of $CI will be the name of the controller 
    if(get_class($CI) !== 'welcome') { 
     return false; 
    } 

    if(! $var_that_flags_do_the_task){ 
     return false 
    } 

    //do post system code here 

} 
-1

私はあなたがログに記録されているような許可を持っているかのようにコントローラをチェックしたいと思っています。

あなたは

$の設定[ 'enable_hooksは'] = TRUE、アプリケーション/設定/ config.phpの中にフックを有効にする必要があります。

次にあなたがチェックした後の結果は何あなたのapllication /フック/ PreLogin.php

class PreLogin{ 
    public function __construct(){ 
     $CI =& get_instance(); 
     $this->CI->load->library('session'); 
    } 

    public function auth(){ 
     if(! isset($this->CI->session->userdata('id'))){ 
      $this->CI->session->set_flashdata('error', 'You do not have permission to enter this url'); 

      redirect(base_url(), 'refresh'); 
     } 
    } 
} 
+0

いいえ、私は特定のコントローラの特定のメソッドに対してのみ有効にするpost_systemフックについて話していました –

関連する問題