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 Пользователь, который регистрируется
 */

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)