Плагины — расширение ядра фреймворка
Функция плагинов CodeIgniter предоставляет способ подключения и изменения внутренней работы фреймворка без вмешательства в основные файлы. При запуске 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/hooks/, вы просто используете ‘hooks’ в качестве пути к файлу. Если ваш скрипт находится в application/hooks/utilities/, вы используете ‘hooks/utilities’ в качестве пути к файлу. Без конечного слэша.
- params Любые параметры, которые вы хотите передать своему скрипту. Этот элемент является необязательным.
Вы также можете использовать лямбда-функции (или анонимные функции) в качестве плагинов с более простым синтаксисом:
$hook['post_controller'] = function()
{
/* do something here */
};
Несколько вызовов одного и того же плагина
Если вы хотите использовать одну и ту же точку подключения с более чем одним скриптом, просто сделайте объявление массива многомерным, как это:
$hook['pre_controller'][] = array(
'class' => 'MyClass',
'function' => 'MyMethod',
'filename' => 'Myclass.php',
'filepath' => 'hooks',
'params' => array('beer', 'wine', 'snacks')
);
$hook['pre_controller'][] = array(
'class' => 'MyOtherClass',
'function' => 'MyOtherMethod',
'filename' => 'Myotherclass.php',
'filepath' => 'hooks',
'params' => array('red', 'yellow', 'blue')
);
Обратите внимание на скобки после каждого индекса массива:
$hook['pre_controller'][]
Это позволяет вам использовать одну и ту же точку подключения с несколькими скриптами. Порядок определения вашего массива будет порядком выполнения.
Точки подключения
Ниже приведён список доступных точек подключения.
- pre_system Вызывается очень рано во время выполнения системы. В этот момент загружены только класс benchmark и класс плагинов. Маршрутизация и другие процессы ещё не выполнены.
- pre_controller Вызывается непосредственно перед вызовом любого из ваших контроллеров. Все базовые классы, маршрутизация и проверки безопасности выполнены.
- post_controller_constructor Вызывается сразу после создания вашего контроллера, но до выполнения любых методов.
- post_controller Вызывается сразу после полного выполнения вашего контроллера.
-
display_override Переопределяет метод
_display(), используемый для отправки окончательной страницы веб-браузеру в конце выполнения системы. Это позволяет вам использовать собственную методологию отображения. Обратите внимание, что вам необходимо сделать ссылку на суперобъект CI с помощью$this->CI =& get_instance(), а затем окончательные данные будут доступны, вызвав$this->CI->output->get_output(). -
cache_override Позволяет вызвать свой собственный метод вместо метода
_display_cache()в Библиотеке вывода. Это позволяет использовать собственную механику отображения кэша. - post_system Вызывается после отправки окончательной отрендеренной страницы в браузер в конце выполнения системы после отправки окончательных данных в браузер.
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/general/hooks.html