CodeIgniter, руководство пользователя к версии 1.6.1


Хуки — Расширение ядра

Технология хуков в CI позволяет вам изменять ход работы фреймворка без изменения файлов ядра. Когда 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')
                                );

Замечания:
Индекс массива говорит о том, каким хуком вы хотите воспользоваться. В приведенном выше примере устанавливается хук типа 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'][]

Это позволит использовать сразу несколько хуков последовательно. Они будут вызваны в таком порядке, в каком вы их объявили.

Точки хуков

Ниже приведен список доступных типов хуков