Хуки — расширение ядра фреймворка
Хуки дают средства для изменения внутренней работы фреймворка без взлома системных файлов. Как работает 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.
Список доступных точек ниже.
Следующие элементы должны быть определены в ассоциативном массиве хука:
- class Имя класса, который вы хотите вызвать. Если вы предпочитаете использовать процедурные функции вместо класса, оставьте это поле пустым.
- function Имя функции, которую вы хотите вызвать.
- filename Имя файла, содержащего ваши класс и функцию.
- filepath Имя директории, содержащей ваш скрипт. Примечание: ваш скрипт должен находиться в директории ВНУТРИ директории приложения application. Указывайте относительный путь от директории приложения application. Например, если ваш скрипт расположен в application/hooks, вы можете просто использовать hooks в качестве пути. Если ваш скрипт находится в application/hooks/utilities, используйте hooks/utilities. Без завершающего слеша.
- params Любые параметры, которые вы хотите передать вашему скрипту. Это опциональный элемент.
Множественные вызовы различных хуков
Если вы хотите использовать несколько хуков, просто сделайте многомерный массив:
$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'][]
Это позволит вам вызвать в определенной точке хука несколько скриптов. Они будут исполняться в том порядке, в котором вы указали.
Точки хуков
Вот список доступных точек.
- pre_system
Вызывается очень рано, при выполнении системы. Только тесты и хуки классов загружаются в этой точке. Роутинг или другие процессы еще не работают. - pre_controller
Вызывается немедленно при вызове любого из ваших контроллеров. Все основные классы, роутинг и проверки безопасности уже выполнены. - post_controller_constructor
Вызывается немедленно после того, как выполнен конструктор контроллера, но до того, как вызван какой-либо метод. - post_controller
Вызывается после того, как контроллер полностью выполнен. - display_override
Переписывает функцию _display(), используемую для отправки готовой страницы в браузер и завершении выполнения системы. Это позволяет вам использовать собственные методологии отображения. Обратите внимание, что вы должны получить ссылку на суперобъект CI c $this->CI =& get_instance() и только после этого будут доступны финализированные данные, через $this->CI->output->get_output() - cache_override
Позволяет вам вызывать собственные функции вместо _display_cache() в классе Output. Это позволяет вам использовать собственный механизм кеширования вывода. - post_system
Вызывается после того, как страница отправлена в браузер, по окончании выполнения системы