CodeIgniter 使用手冊版本 2.2.0


Hooks - 擴充核心

CodeIgniter的Hooks機制提供了一個方法來進入並改變框架的內部作業而不用修改核心檔案。當CodeIgniter執行時,它會遵循在程式流程圖頁面中圖示的流程。不過在一些實例中,你也許會想要在流程的特定的階段執行特定的動作。例如,你可能會想要在你的控制器(controller)載入前後執行一些程式,或是在其他位置觸發你自己的程式。

啟動Hooks

Hooks機制可以透過下列 application/config/config.php 檔案中的設定項目來啟動:

$config['enable_hooks'] = TRUE;

定義一個Hook

Hooks定義在 application/config/hooks.php 檔案中。每一個hook都用下面陣列的方式來指定:

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

注意:
陣列索引的名稱與你要使用的特定的hook插入點相對應。在上例中,hook插入點是 pre_controller 。本頁底下可以找到一個hook插入點的清單。另外,以下的項目必須在hook的關係陣列中定義好:

在同一的Hook中多次呼叫

如果要在一個hook插入多個程式,只要把陣列宣告成多維的就可以。像這樣:

$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'][]

這樣就可以讓你在一個hook中插入多個程式。程式執行的順序就是你在陣列中定義的順序。

Hook插入點

以下是可用的hook插入點清單: