Hooks - расширение ядра фреймворка

 

В CodeIgniter хуки (hook - англ. "крюк") позволяют изменить внутренние механизмы работы ядра без вмешательства в исходный код.
При запуске CodeIgniter выполняет определённый процесс обработки, отражённый в диаграмме работы приложения. Возможны случаи, когда вам необходимо выполнить какие-либо действия на определённой стадии выполнения приложения. К примеру - выполнить код до того, как будет загружен контроллер, или после этого, или запустить ваш собственный скрипт на каком-либо другом этапе.

Включение хуков

Хуки могут быть включены/выключены глобально в файле application/config/config.php:

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

Определение хука

Хуки определяются в файле 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. );

Примечания:
Индекс массива совпадает с названием хука, который вы хотите использовать. В приведённом выше примере используется хук pre_controller. Полный список точек внедрения хуков приведён ниже. В массиве описания хука должны быть определены следующие параметры:

class
Имя класса который вы хотите вызвать. Если вы хотите использовать обычную процедуру, оставьте параметр пустым.
function
Имя функции которую нужно вызывать
filename
Имя файла, который содержит код
filepath
Название каталога, который содержит файл с кодом хука. Каталог должен располагаться в рамках вашего каталога application, путь является относительным к нему. К примеру, если файл с кодом хука расположен в каталоге application/hooks, то в качестве параметра filepath нужно указать просто hooks. Если файл расположен в каталоге application/hooks/utils, то для него нужно задать hooks/utils. Слэш в конце строки не нужен.
params
Параметры, которые вы хотите передать в код хука. Данный параметр при объявлении хука не является обязательным

Несколько вызовов одного и того же хука

Если вам нужно вызвать несколько функций в одной и той же точке вставки кода, вы можете просто сделать многомерный массив объявления хука:

  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. );
  8.  
  9. $hook['pre_controller'][] = array(
  10. 'class' => 'MyOtherClass',
  11. 'function' => 'MyOtherfunction',
  12. 'filename' => 'Myotherclass.php',
  13. 'filepath' => 'hooks',
  14. 'params' => array('red', 'yellow', 'blue')
  15. );

Обратите внимание на квадратные скобки после каждого индекса массива хуков:
  1. $hook['pre_controller'][]

Это позволяет вам вызывать несколько функций в одной и той же точке вставки кода. Порядок вызова совпадает с порядком задания элементов массива хуков.

Точки вставки кода

Ниже представлен список доступных в системе точек вставки кода (хуков):

pre_system
Вызывается каждый раз при запуске системы. В данной точке загружены только классы замера производительности и обработки хуков. Маршрутизация или какая-либо другая обработка еще не производилась
pre_controller
Вызывается непосредственно перед вызовом контроллера. Все базовые классы загружены, маршрутизация и проверка безопасности уже выполнены.
post_controller_constructor
Вызывается сразу после создания экземпляра контроллера, но до того, как вызван какой-либо из методов контроллера.
post_controller
Вызывается после того, как был выполнен код контроллера
display_override
Перекрывает функцию _display(), которая используется для отправки браузеру окончательных данных страницы в конце выполнения кода системы. Это позволяет вам использовать свои собственные методы вывода данных. Обратите внимание на то, что вам понадобиться обратиться к супер-объекту CodeIgniter $this->CI =& get_instance() чтобы получить доступ к окончательным данным вывода при помощи кода
  1. $this->CI->output->get_output()

cache_override
Позволяет вам вызвать вашу собственную функцию вместо функции _display_cache() класса вывода. Это даёт возможность использовать произвольный механизм кеширования.
scaffolding_override
Позволяет использовать ваш собственный скрипт при обработке "режима конструктора"
post_system
Вызывается после того как окончательная обработанная страница отправлена браузеру, в конце выполнения кода системы.

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

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <b> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <p> <h2> <h3> <h4> <table> <tr> <td> <th>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]". PHP source code can also be enclosed in <?php ... ?> or <% ... %>.

Подробнее о форматировании

CAPTCHA
Этот вопрос предназначен для того, чтобы отсеять ботов
3 + 7 =
Решите простой математический пример и введите результат. К примеру, для вопроса 1+3 нужно ввести 4

Вход в систему

Последние комментарии