PHP code example of hehex / hehep-hevent

1. Go to this page and download the library: Download hehex/hehep-hevent 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/ */

    

hehex / hehep-hevent example snippets


$eventConf = [
    // 预定义"login"事件别名集合
    'alias'=>[
        // 定义名称为"login"事件
        'login'=>'admin\service\LoginEvent'
    ],
    
    // 预定义"login"事件监听器集合
    'listeners'=>[
        'login'=>[
            'admin\service\LoginEvent',// 创建LoginEvent新实例,并调用其handle
            'admin\service\LoginEvent@@addlog',// 调用LoginEvent 静态方法 addlog
            'admin\service\LoginEvent@setSession'// 创建LoginEvent新实例,并调用其setSession
        ]           
    ]
];



use hehe\core\hevent\EventManager;

// 创建事件管理器
$hevent = new EventManager([]);

// 设置事件别名
$hevent->setAlias('login_event',LoginEvent::class);

// 创建事件对象
$event = $hevent->newEvent(LoginEvent::class);

// 绑定事件监听器
$hevent->listen(LoginEvent::class,LoginEventListener::class);

// 触发事件
$hevent->trigger(LoginEvent::class,['user'=>[]]);


namespace apiadmin\behaviors;

use hehe\core\hevent\base\Event;

/**
 * 登录事件
 */
class LoginEvent extends Event
{   
    /**
    * @var User
     */
    public $user;
    
    // 定义事件的监听器集合
    protected $listeners = [
        LoginEventListener::class,
        LoginEventListener::class . '@@addlog',
        LoginEventListener::class . '@setSession'
    ];
    
    public function __construct(?User $user,array $propertys = [])
	{
	    $this->user = $user;
	    parent::__construct($propertys);
	}
}

use hehe\core\hevent\EventManager;
$hevent = new EventManager([]);

// 准备事件数据
$user = new User();

// 触发事件
$hevent->trigger(LoginEvent::class,['user'=>$user]);


use hehe\core\hevent\EventManager;
$hevent = new EventManager([]);

$hevent->setAlias('login_event',LoginEvent::class);

// 准备事件数据
$user = new User();

// 使用事件类触发事件方式1
$hevent->trigger(LoginEvent::class,['user'=>$user]);

// 使用别名触发事件方式2
$hevent->trigger('login_event',['user'=>$user]);


use hehe\core\hevent\EventManager;
use apiadmin\behaviors\LoginEvent;

$hevent = new EventManager([]);
// 默认Event事件类创建对象
$event = $hevent->newEvent();

// 指定事件类创建对象
$event = $hevent->newEvent(LoginEvent::class);

// 指定事件别名创建对象
$event = $hevent->newEvent('login_event');

// 触发事件
$hevent->trigger($event,['user'=>$user]);


namespace apiadmin\behaviors;
use hehe\core\hevent\base\Event;
use apiadmin\behaviors\LoginEvent;
// 定义登录事件处理器
class LoginEventListener
{
    // 推送登录事件至队列,通知其他订阅系统
    public function handle(LoginEvent $event)
    {
        $user = $event->user;
    }

    // 添加登录日志
    public static function addlog(LoginEvent $event)
    {
        $user = $event->user;
    }

    // 设置会话
    public function setSession(Event $event)
    {
        $user = $event->user;
    }
}


use hehe\core\hevent\EventManager;
$hevent = new EventManager([]);

// 事件类与监听器绑定
$hevent->listen(LoginEvent::class,LoginEventListener::class);
$hevent->listen(LoginEvent::class,LoginEventListener::class . '@@addlog');
$hevent->listen(LoginEvent::class,LoginEventListener::class . '@setSession');

// 事件别名与监听器绑定
$hevent->setAlias('login_event',LoginEvent::class);
$hevent->listen('login_event',LoginEventListener::class);
$hevent->listen('login_event',LoginEventListener::class . '@@addlog');
$hevent->listen('login_event',LoginEventListener::class . '@setSession');


use hehe\core\hevent\EventManager;
$hevent = new EventManager([]);
// 绑定事件监听器
$hevent->listen(LoginEvent::class,LoginEventListener::class);

// 指定事件类触发事件
$hevent->trigger(LoginEvent::class,['user'=>$user]);

// 指定事件别名触发事件
$hevent->trigger(LoginEvent::class,['user'=>$user]);

// 事件对象触发事件
$event = $hevent->newEvent(LoginEvent::class);
$hevent->trigger($event,['user'=>$user]);



// 事件数据
$user = new User();

// 创建事件对象时传递构造参数
$event = new LoginEvent($user);

// 创建事件对象时传递构造参数
$event = $hevent->newEvent(LoginEvent::class,$user);

// 通过setParams设置事件数据
$event = new LoginEvent();
$event->setParams(['user'=>$user,'logintime'=>date('Y-m-d H:i:s')]);

// 触发事件时提供参数
$hevent->trigger($event,['user'=>$user,'logintime'=>date('Y-m-d H:i:s')]);


use hehe\core\hevent\base\Event;
use apiadmin\behaviors\LoginEvent;
class LoginEventListener
{
    // 默认监听器方法
    public function handle(LoginEvent $event)
    {
        $user = $event->user;
    }

    // 添加登录日志
    public static function addlog(LoginEvent $event)
    {
        $user = $event->user;
    }

    // 设置会话
    public function setSession(Event $event)
    {
        // 获取事件属性数据
        $user = $event->user;
        
        // 获取事件非属性数据
        $logintime = $event->getParam('logintime');
        
        // 获取所有参数
        $params = $event->params;
    }
}

namespace apiadmin\behaviors;

use hehe\core\hevent\base\Event;
use hehe\core\hevent\annotation\AnnEvent;

/**
 * 登录事件
 * @AnnEvent("user_login")
 */
class LoginEvent extends Event
{
    public $user;
}

namespace admin\service;
use hehe\core\hevent\annotation\AnnEventListener;
use hehe\core\hevent\base\Event;

class LoginEventListener
{
    /**
     * 设置会话 
     * @AnnEventListener("user_login")
     * @param Event $event
     */
    public function handle(Event $event)
    {
        // 逻辑代码
    }

    /**
     * 添加登录日志 
     * @AnnEventListener("user_login")
     * @param Event $event
     */
    public static function addlog(Event $event)
    {
        // 逻辑代码
    }

    /**
     * 设置会话 
     * @AnnEventListener("user_login")
     * @param Event $event
     */
    public function setSession(Event $event)
    {
        // 逻辑代码
    }
}


use hehe\core\hevent\EventManager;
use apiadmin\behaviors\LoginEvent;
$hevent = new EventManager([]);
// 测试样例
$user = new User();

// 无需主动设置监听器
$this->hevent->trigger('user_login',['user'=>$user]);
$this->hevent->trigger(LoginEvent::class,['user'=>$user]);