事件监听

    注解监听

    首先需要定义一个类,类名和位置无所谓,只要配置了beanScan能被扫描到即可。

    类必须实现IEventListener接口和public function handle(EventParam $e)方法。

    然后在类上写注解。注解有两个参数:

    代码监听

    除了使用注解,你还可以写代码手动监听

    1. use Imi\Event\Event;
    2. Event::on('事件名', function(){
    3. // 事件回调
    4. });
    5. Event::on('事件名', function(){
    6. // 事件回调
    7. }, $priority);
    8. Event::one('事件名', function(){});
    9. // 取消事件
    10. Event::off('事件名', $callable);

    局部事件

    局部事件就是在某个类实例的事件。

    注解监听

    imi/src/Server/Http/Listener/BeforeRequest.php为例

    1. <?php
    2. namespace Imi\Server\Http\Listener;
    3. use Imi\Bean\Annotation\ClassEventListener;
    4. use Imi\Server\Event\Param\RequestEventParam;
    5. use Imi\Server\Event\Listener\IRequestEventListener;
    6. * request事件前置处理
    7. * @ClassEventListener(className="Imi\Server\Http\Server",eventName="request",priority=PHP_INT_MAX)
    8. */
    9. class BeforeRequest implements IRequestEventListener
    10. /**
    11. * 事件处理方法
    12. * @param RequestEventParam $e
    13. * @return void
    14. */
    15. public function handle(RequestEventParam $e)
    16. {
    17. // ...
    18. }
    19. }

    类必须实现对应接口和handle()方法,每个类的事件定义不同。

    然后在类上写注解。注解参数如下:

    className类名
    eventName要监听的事件名称
    priority事件触发后执行的优先级,数字越大越先执行,同样大执行顺序不一定

    代码监听

    1. $object->trigger('事件名称', '传入事件回调的数据', '目标对象', '参数类,默认为EventParam::class');