PHP code example of arhone / trigger

1. Go to this page and download the library: Download arhone/trigger library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

arhone / trigger example snippets



use arhone\commutation\trigger\Trigger;




// Добавляем обработчик на определённое событие
$trigger->add('событие', function () {
    return 'ответ';
});

// Запускаем событие
echo $trigger->run('событие'); // ответ

// триггером для запуска обработчика послужил запуск события $trigger->run('событие')



// Добавляем обработчик
$trigger->add('switch:(on|off)', function ($match, $data, $option) {

    if ($match[1] == 'on') {
        return $data . ' - Включен';
    } else {
        return $data . ' - Отключен';
    }

});

// Запускаем событие
echo $trigger->run('switch:on', 'Чайник'); // Чайник - Включен



// Добавляем обработчик
$trigger->add('switch:(on|off)', function ($match, $data) {
    return 'Самовар';
});

// Добавляем обработчик
$trigger->add('switch:(on|off)', function ($match, $data) {

    if ($match[1] == 'on') {
        return $data . ' - Включен';
    } else {
        return $data . ' - Отключен';
    }

});

// Запускаем событие
echo $trigger->run('switch:on', 'Чайник'); // Самовар - Включен



// Добавляем обрывающий обработчик
$trigger->add('switch:(on|off)', function ($match, $data) {

    $energy = false;
    if (!$energy) {
        return 'Нет электричества';
    }

}, [
    'break' => true
]);

// Добавляем обработчик
$trigger->add('switch:(on|off)', function ($match, $data) {

    if ($match[1] == 'on') {
        return $data . ' - Включен';
    } else {
        return $data . ' - Отключен';
    }

});

// Запускаем событие
echo $trigger->run('switch:on', 'Чайник'); // Нет электричества



$trigger->add('hello', function ($match, $data) {
    return $data . ' дорогой';
}, [
    'name'     => 'Второй обработчик',
    'position' => 0.2
]);

$trigger->add('hello', function ($match, $data) {
    return $data . ' мой';
}, [
    'name'     => 'Первый обработчик',
    'position' => 0.1
]);

$trigger->add('hello', function ($match, $data) {
    return $data . ' друг';
}, [
    'name'     => 'Третий обработчик',
    'position' => 0.3
]);

echo $trigger->run('hello', 'Привет'); // Привет мой дорогой друг

print_r($trigger->plan('hello'));



$trigger->add('test', function ($match, $data) use ($trigger) {

    $trigger->option('two', [
        'status' => false // Второй обработчик не будет запущен
    ]);

    return 'Первый';

}, [
    'name' => 'one',
]);

$trigger->add('test', function ($match, $data) {
    return 'Второй';
}, [
    'name' => 'two',
]);

echo $trigger->run('test'); // Первый



$trigger->add('start', function ($match, $data) {
    return $data . ' раз';
});

$trigger->add('start', function ($match, $data) {
    return $data . ' два';
});

$trigger->add('start', function ($match, $data) {
    return $data . ' три';
}, [
    'status' => false
]);

echo $trigger->run('start'); // раз два



$trigger->add('(http[s]?):get:/home.html', function () {
    return 'hello word'; 
});

// Пользователь зашёл по HTTP типа GET на страницу /home.html
echo $trigger->run('http:get:/home.html');



$trigger->add('console:cache-clear', function () {
    return 'Кэш очищен';
});

echo $trigger->run('console:cache-clear');



// Проверяем если пользователь не авторизован
$trigger->add('http:get:/home.html', function () {
    if (User::id() == false) {
        return 'Нужно авторизироваться';
    }
}, [
    'break' => true
]);

// Или выводим приветствие
$trigger->add('http:get:/home.html', function () {
    return 'Привет'; 
});

// Пользователь зашёл по HTTP типа GET на страницу /home.html
echo $trigger->run('http:get:/home.html');



// Очищаем кэш новостей
$trigger->add('module:news:add', function () {
    Cache::clear('module:news');
});

// Событие что была добавлена новость с id 100
$trigger->run('module:news:add', [
    'id' => 100
]);



// Пишем кэш в Redis
$trigger->add('cache:set', function ($match, $data) {
    CacheRedis::set($data['key'], $data['value']);
});

// Пишем в файл на всякий случай
$trigger->add('cache:set', function ($match, $data) {
    CacheFile::set($data['key'], $data['value']);
});

// Генерируем команду на запись в кэш
$trigger->run('cache:set', [
    'key'   => 'ключ',
    'value' => 'данные для кэширования'
]);



// Берём кэш из редиса, если сервер редиса доступен
$trigger->add('cache:get', function ($match, $data) {
    if (CacheRedis::status() == true) {
        return CacheRedis::get($data['key']);    
    }
}, [
    'break' => true
]); // Параметр break, остановит стек, если обработчик что-то вернул (не null)

// Если редис ничего не вернул, то запустится следующий обработчик и вернёт кэш из файла
$trigger->add('cache:get', function ($match, $data) {
   if (CacheFile::status() == true) {
       return CacheFile::get($data['key']);
   }
});

// Генерируем команду на получение кэша
$trigger->run('cache:get', [
    'key' => 'ключ'
]);



$trigger->add('hello', function ($match, $data) {
    return $data . ' мой';
});

$trigger->add('hello', function ($match, $data) {
    return $data . ' дорогой';
});

$trigger->add('hello', function ($match, $data) {
    return $data . ' друг';
});

echo $trigger->run('hello', 'Привет'); // Привет мой дорогой друг