Hooks - TsSaltan/ts-framework GitHub Wiki
Работа с хуками
Функционал хуков описан в файле ts-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.install
Завершение установки приложения, происходит после установки всех плагинов
app.start
Запуск приложения, происходит после инициализации всех плагинов
app.finish
Завершение работы приложения
Plugin
Хуки, связанные с работой плагинов
plugin.load
Загрузка плагина
Hook::registerOnce('plugin.load', function(){
// Если текущее приложение расположено не в корневой директории, указываем директорию
App::setBasePath('subdirectory');
// Если плагин использует свои шаблоны - укажем в системе путь к ним
TemplateRoot::add('dashboard', __DIR__ . DS . 'template');
// Можно добавить свой фильтр данных
Input::addFilter('login', function($input){
$input->required();
$input->regexp('#[A-Za-z0-9-_\.]+#Ui');
return true;
});
});
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 Пользователь, который регистрируется
*/