-
Notifications
You must be signed in to change notification settings - Fork 0
Hooks
Функционал хуков описан в файле 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);
});
Хуки, связанные с работой приложения
Инициализация приложения, происходит после инициализации всех плагинов, но перед запуском роутера.
Хук подходит для переопределения путей у роутера
Хук запускается перед процессом инициализации установки
Запуск приложения, происходит после инициализации всех плагинов, и после запуска роутера.
Хук НЕ сработает при инициализации процесса установки
Подходит, например, для указания путей к шаблонам
Hook::registerOnce('app.start', function(){
TemplateRoot::add('index', __DIR__ . DS . 'template' . DS . 'index');
});
Вызов хука происходит после завершения установки приложения, после установки всех плагинов.
При вызове хука происходит импорт файлов install.sql из корневых директорий плагинов (при активном плагине database).
При активном плагине user происходит создание учётной записи администратора с данными admin:admin
Подходит для установки заданий планировщика.
Хук срабатывает после завершение работы приложения
Хуки, связанные с работой плагинов
Загрузка плагина. Хук вызывается как при старте приложения, так и во время процесса установки, поэтому могут возникнуть ошибки при обращении к ещё не загруженным плагинам!
Установка плагина, вызывается в процессе установки системы. Можно указать параметры, которые необходимо будет заполнить во время установки приложения, подробнее см. процесс установки.
/**
* @return array Массив с параметрами, которые необходимо указать в процессе установки
*/
Hook::registerOnce('plugin.install', function(){
// Можно указать плагины, от которых зависит текущий плагин
Plugins::required('cache', 'crypto', 'database');
// Также можно указать плагины, с которыми возможен конфликт работы
Plugins::conflict('smsc');
// Указываем поля, которые необходимо заполнить во время установки
return [
// Подробнее см. страницу с описанием процесса установки
];
});
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);
});
Авторизация пользователя
/**
* @param SingleUser $user Пользователь, который авторизовывается
*/
Регистрация пользователя
/**
* @param SingleUser $user Пользователь, который регистрируется
*/