Hooks - расширение ядра фреймворка
- Автор mityok on июля 2nd, 2008
В CodeIgniter хуки (hook - англ. "крюк") позволяют изменить внутренние механизмы работы ядра без вмешательства в исходный код.
При запуске CodeIgniter выполняет определённый процесс обработки, отражённый в диаграмме работы приложения. Возможны случаи, когда вам необходимо выполнить какие-либо действия на определённой стадии выполнения приложения. К примеру - выполнить код до того, как будет загружен контроллер, или после этого, или запустить ваш собственный скрипт на каком-либо другом этапе.
Включение хуков
Хуки могут быть включены/выключены глобально в файле application/config/config.php:
$config['enable_hooks'] = TRUE;
Определение хука
Хуки определяются в файле application/config/hooks.php. Каждый из хуков задаётся массивом следующего вида:
'class' => 'MyClass', 'function' => 'Myfunction', 'filename' => 'Myclass.php', 'filepath' => 'hooks', );
Примечания:
Индекс массива совпадает с названием хука, который вы хотите использовать. В приведённом выше примере используется хук pre_controller. Полный список точек внедрения хуков приведён ниже. В массиве описания хука должны быть определены следующие параметры:
- class
- Имя класса который вы хотите вызвать. Если вы хотите использовать обычную процедуру, оставьте параметр пустым.
- function
- Имя функции которую нужно вызывать
- filename
- Имя файла, который содержит код
- filepath
- Название каталога, который содержит файл с кодом хука. Каталог должен располагаться в рамках вашего каталога application, путь является относительным к нему. К примеру, если файл с кодом хука расположен в каталоге application/hooks, то в качестве параметра filepath нужно указать просто hooks. Если файл расположен в каталоге application/hooks/utils, то для него нужно задать hooks/utils. Слэш в конце строки не нужен.
- params
- Параметры, которые вы хотите передать в код хука. Данный параметр при объявлении хука не является обязательным
Несколько вызовов одного и того же хука
Если вам нужно вызвать несколько функций в одной и той же точке вставки кода, вы можете просто сделать многомерный массив объявления хука:
'class' => 'MyClass', 'function' => 'Myfunction', 'filename' => 'Myclass.php', 'filepath' => 'hooks', ); 'class' => 'MyOtherClass', 'function' => 'MyOtherfunction', 'filename' => 'Myotherclass.php', 'filepath' => 'hooks', );
Обратите внимание на квадратные скобки после каждого индекса массива хуков:
$hook['pre_controller'][]
Это позволяет вам вызывать несколько функций в одной и той же точке вставки кода. Порядок вызова совпадает с порядком задания элементов массива хуков.
Точки вставки кода
Ниже представлен список доступных в системе точек вставки кода (хуков):
- pre_system
- Вызывается каждый раз при запуске системы. В данной точке загружены только классы замера производительности и обработки хуков. Маршрутизация или какая-либо другая обработка еще не производилась
- pre_controller
- Вызывается непосредственно перед вызовом контроллера. Все базовые классы загружены, маршрутизация и проверка безопасности уже выполнены.
- post_controller_constructor
- Вызывается сразу после создания экземпляра контроллера, но до того, как вызван какой-либо из методов контроллера.
- post_controller
- Вызывается после того, как был выполнен код контроллера
- display_override
- Перекрывает функцию _display(), которая используется для отправки браузеру окончательных данных страницы в конце выполнения кода системы. Это позволяет вам использовать свои собственные методы вывода данных. Обратите внимание на то, что вам понадобиться обратиться к супер-объекту CodeIgniter
$this->CI =& get_instance()чтобы получить доступ к окончательным данным вывода при помощи кода- $this->CI->output->get_output()
- cache_override
- Позволяет вам вызвать вашу собственную функцию вместо функции _display_cache() класса вывода. Это даёт возможность использовать произвольный механизм кеширования.
- scaffolding_override
- Позволяет использовать ваш собственный скрипт при обработке "режима конструктора"
- post_system
- Вызывается после того как окончательная обработанная страница отправлена браузеру, в конце выполнения кода системы.

Отправить комментарий