CodeIgniter ユーザガイド 日本語版 Version 2.1.0


フック - フレームワークコアの拡張

CodeIgniter のフック機能は、コアのファイルをハックすることなく、フレームワークの内部動作に関連付けて、その動作を変更する手段を提供します。 CodeIgniter は、アプリケーションフローチャート のページで図示したような特定の実行プロセスに従って動きます。 しかし、この実行プロセスのどこかの段階で、何かの処理を行いたい場合があるかもしれません。 たとえば、コントローラがロードされる直前あるいは直後に、あるスクリプトを実行したい場合、 あるいは、他のどこかの段階でユーザ作成のスクリプトを起動したい場合などです。

フックの有効化

application/config/config.php ファイルの次の設定項目をセットして、フック機能をアプリケーション全体で有効/無効に設定できます:

$config['enable_hooks'] = TRUE;

フックの定義

フックは application/config/hooks.php ファイルで定義します。各フックは次の例のような配列として指定されます:

$hook['pre_controller'] = array(
                                'class'    => 'MyClass',
                                'function' => 'Myfunction',
                                'filename' => 'Myclass.php',
                                'filepath' => 'hooks',
                                'params'   => array('beer', 'wine', 'snacks')
                                );

Notes:
配列の添字は、利用したいフックポイントの名前になります。上の例では、フックポイントは pre_controller になります。フックポイントのリストは下の方をご覧ください。 フックを定義する連想配列で、次の項目を定義する必要があります:

同一フックでの複数呼び出し

ひとつ以上のスクリプトを同じフックポイントで使いたい場合は、次のように、単純に、配列の宣言を多次元にします:

$hook['pre_controller'][] = array(
                                'class'    => 'MyClass',
                                'function' => 'Myfunction',
                                'filename' => 'Myclass.php',
                                'filepath' => 'hooks',
                                'params'   => array('beer', 'wine', 'snacks')
                                );

$hook['pre_controller'][] = array(
                                'class'    => 'MyOtherClass',
                                'function' => 'MyOtherfunction',
                                'filename' => 'Myotherclass.php',
                                'filepath' => 'hooks',
                                'params'   => array('red', 'yellow', 'blue')
                                );

各配列の後ろにブラケットを忘れないよう留意してください:

$hook['pre_controller'][]

このようにすると、複数スクリプトを同一フックで利用できます。配列を定義した順が実行の順序になります。

フックポイント

以下は、利用できるフックポイントのリストです。