Symfoware

Symfowareについての考察blog

CodeIgniter 3 処理のフック(General Topics - Hooks - Extending the Framework Core)

CodeIgniter User Guide

General TopicsのHooks - Extending the Framework Coreについて調べてみます。
Hooks - Extending the Framework Core


Hooks - Extending the Framework Core



CodeIgniterのコアファイルを上書きする程でもない、処理の前後にちょっとした
ログ出力などを行いたい時があります。
そんな時は、フック機能を使用するのが便利です。



Enabling Hooks



フック機能を有効にするには「application/config/config.php」を編集します。


  1. $config['enable_hooks'] = TRUE;






Defining a Hook



フック機能の定義は「application/config/hooks.php」で行います。
例は以下のとおり。


  1. $hook['pre_controller'] = array(
  2.     'class'    => 'MyClass',
  3.     'function' => 'Myfunction',
  4.     'filename' => 'Myclass.php',
  5.     'filepath' => 'hooks',
  6.     'params' => array('beer', 'wine', 'snacks')
  7. );




指定する値の解説です。


・class
フック時に呼び出すクラス名を指定します。
インスタンスを生成する必要がない関数を呼び出す場合は空白にします。

・function
呼び出すメソッド、または関数の名前を指定します。

・filename
呼び出すクラス、または関数が記載されているプログラムファイル名を指定します。

・filepath
プログラムファイルがあるパスを指定します。
パスの指定は、application/からの相対パスで指定します。

例えば、application/hooks/に配置した場合は「hooks」
application/hooks/utilities/に配置した場合は「hooks/utilities」を指定します。
前後のスラッシュは記載しません。

・params Any parameters you wish to pass to your script. This item is optional.
メソッド、または関数を呼び出すときの引数です。
この指定はオプションです。


PHP 5.3以上の場合は、関数を直接登録することも可能です。


  1. $hook['post_controller'] = function() {
  2.         /* do something here */
  3. };






Multiple Calls to the Same Hook



同じポイントに複数のフックを仕掛けたい場合は、配列にします。


  1. $hook['pre_controller'][] = array(
  2.     'class'    => 'MyClass',
  3.     'function' => 'MyMethod',
  4.     'filename' => 'Myclass.php',
  5.     'filepath' => 'hooks',
  6.     'params' => array('beer', 'wine', 'snacks')
  7. );
  8. $hook['pre_controller'][] = array(
  9.     'class'    => 'MyOtherClass',
  10.     'function' => 'MyOtherMethod',
  11.     'filename' => 'Myotherclass.php',
  12.     'filepath' => 'hooks',
  13.     'params' => array('red', 'yellow', 'blue')
  14. );









Hook Points



フックが指定できるポイントは以下のとおり。

・pre_system
クライアントからの呼び出しを受け付けた直後に呼び出されます。
この時点でロードされているのは、benchmarkとhooksクラスだけです。
ルーティングや他のプロセスはまだ実行されていない状態です。


・pre_controller
指定のコントローラーのインスタンス生成直前に呼び出されます。
基本となるコアシステムやルーティング、セキュリティチェックは完了した状態です。


・post_controller_constructor
該当コントローラーのインスタンス生成直後に呼び出されます。
まだコントローラーのメソッド呼び出しは発生していない状態です。


・post_controller
コントローラーの該当メソッドの処理が終了した直後に呼び出されます。


・display_override
クライアントに処理結果を送信する直前に呼び出されます。


  1. $this->CI =& get_instance();
  2. $this->CI->output->get_output();



とすることで、クライアントに送信予定のデータが取得できます。


・cache_override
ページキャッシュを使用する設定の場合、キャッシュに書き込む直前に呼び出されます。
独自のキャッシュ機構を組み込みたいときに便利な拡張ポイントです。


・post_system
クライアントへページデータの送信が完了した後に呼び出されます。
ログの書き込みはここが便利?


※実際に試したわけではなく、適当な訳なので誤りがあるかも。




CodeIgniter 3のユーザーガイド(User Guide)まとめ

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/01/25(日) 16:14:32|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<CodeIgniter 3 ヘルパー、ライブラリの自動ロード(General Topics - Auto-loading Resources) | ホーム | CodeIgniter 3 補助的なクラスの作成方法(General Topics - Creating Ancillary Classes)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1607-a4c7080a
この記事にトラックバックする(FC2ブログユーザー)