Skip to content
TsSaltan edited this page Jan 12, 2022 · 17 revisions

Работа с хуками

Функционал хуков описан в файле its-framework/Hook.php. Хук позволяет перехватить и выполнить код в том или ином событии, список существующих событий представлен ниже.

Пример работы с хуком

// Регистрация хука
Hook::register('hook.name', function(){
    // Выполнение кода во время вызова хука
});

// Этот хук выполнится один раз
Hook::registerOnce('hook.name', function(){
    // Выполнение кода...
});

Hook::register('hook.name', function(){
    // Этот хук выполнится раньше всех, т.к. 3-й аргумент - приоритет равен 0. Чем меньше значение приоритета, тем раньше будет вызван хук
}, 0);



// Вызов хука где-то в приложении
Hook::call('hook.name');

Другой пример

Hook::register('another.hook', function(string $a, int $b){
    return $a . '-' . $b;
}, 0);

// Вызов хука и передача аргументов
Hook::call('another.hook',['a', 100], 
    function($return){
        echo 'Хук вернул значение: ';
        var_dump($return);
    },

    function($e){
        echo 'Хук вернул ошибку: ';
        var_dump($e);   
});

Список хуков

App

Хуки, связанные с работой приложения

app.init

Инициализация приложения, происходит после инициализации всех плагинов, но перед запуском роутера.
Хук подходит для переопределения путей у роутера
Хук запускается перед процессом инициализации установки

app.start

Запуск приложения, происходит после инициализации всех плагинов, и после запуска роутера.
Хук НЕ сработает при инициализации процесса установки

app.installed

Вызов хука происходит после завершения установки приложения, после установки всех плагинов.
При вызове хука происходит импорт файлов install.sql из корневых директорий плагинов (при активном плагине database).
При активном плагине user происходит создание учётной записи администратора с данными admin:admin
Подходит для установки заданий планировщика.

app.finish

Хук срабатывает после завершение работы приложения


Plugin

Хуки, связанные с работой плагинов

plugin.load

Загрузка плагина. Хук вызывается как при старте приложения, так и во время процесса установки, поэтому могут возникнуть ошибки при обращении к ещё не загруженным плагинам!

plugin.install

Установка плагина, вызывается в процессе установки системы. Можно указать параметры, которые необходимо будет заполнить во время установки приложения, подробнее см. процесс установки.

/**
 * @return array Массив с параметрами, которые необходимо указать в процессе установки
 */
Hook::registerOnce('plugin.install', function(){
    // Можно указать плагины, от которых зависит текущий плагин
    Plugins::required('cache', 'crypto', 'database');

    // Также можно указать плагины, с которыми возможен конфликт работы
    Plugins::conflict('smsc');
    
    // Указываем поля, которые необходимо заполнить во время установки
    return [
        // Подробнее см. страницу с описанием процесса установки
    ];
});

Menu

menu.render.dashboard-top

Hook::register('menu.render.dashboard-top', function(MenuItem $menu){
	$menu->add(new MenuItem('Мой профиль', ['url' => Http::makeURI('/dashboard/user/me'), 'fa' => 'user', 'access' => UserAccess::getAccess('user.self')]), 0);
	$menu->add(new MenuItem('Настройки профиля', ['url' => Http::makeURI('/dashboard/user/me/edit'), 'fa' => 'gear', 'access' => UserAccess::getAccess('user.self')]), 1);
});

menu.render.dashboard-admin-sidebar

User

user.login

Авторизация пользователя

/**
 * @param SingleUser $user Пользователь, который авторизовывается
 */

user.register

Регистрация пользователя

/**
 * @param SingleUser $user Пользователь, который регистрируется
 */

Template

template.render

Dashboard

template.dashboard.config (Template $tpl)

Dashboard/User

template.dashboard.user.edit (Template $tpl, array &$configTabs = ['tabName' => 'tabContent'], int &$activeTab)

template.dashboard.user.profile (Template $tpl, SingleUser $user)

Clone this wiki locally