thinkphp8中事件的使用**事件使用主要有事件监听、事件订阅、事件绑定三种方式**生成相关类的命令行什么是自动注册什么是手动注册事件监听监听类listener目录下的文件手动注册自动注册事件订阅订阅类subscribe目录下手动注册自动注册事件绑定事件类event目录下手动注册自动注册【重要】其他事件使用主要有事件监听、事件订阅、事件绑定三种方式生成相关类的命令行php think make:event 事件类名 php think make:listener 监听类名 php think make:subscribe 订单类名什么是自动注册event.php在框架加载的时候会自动载入在event.php文件中事先做一些处理定义listen数组中的事件名和对应的事件处理类定义subscribe数组中的订阅类定义bind数组的事件名和对应类什么是手动注册就是在控制器业务代码内写事件的监听和触发的代码可以不用管event.php文件。事件订阅 Event::subscribe(…)事件监听 Event::listen(…)触发事件 Event::trigger(…)事件监听就像html文档中dom.addEventlistener(“click”, 事件处理函数)。然后当你点击dom的时候就会执行事件处理函数监听类listener目录下的文件class EventName{ public function handle($event){ //这时候的$event应该是传过来的参数 } }手动注册在Controller内的业务代码写 事件监听和事件触发。// 相当于是dom.addEventlistener(click, 事件处理函数)。只是监听你不点击我也不执行。 Event::listen(EventName, \app\listener\监听类::class); // 相当于你点击dom会自动运行监听类里handle函数。 // 一般发问下 监听类 和 事件名 是一样的但是含义不同也可以不同名。例如 Event::lister(UserLogin,\app\listener\UserLogin::class) Event::trigger(UserLogin, [$params])自动注册在event.php文件定义listen数组中的事件名和对应的事件处理类// 相当于是dom.addEventlistener(click, 事件处理函数)。只是监听你不点击我也不执行。 listen [ EventName [\app\subscribe\监听类::class] //一定是数组一个事件可以绑定多个监听处理类 ]Controller内的业务代码只用触发事件就可以了。Event::trigger(EventName, [$params])事件订阅就你一个事件监听中心一样。只要subscribe了一个订阅类然后就可以触发其中事件处理函数。订阅类subscribe目录下use think\Event; class subName{ public function onEventName1($params){} public function onEventName2($params){} public function subscribe(Event $event) { $event-listen(EventName1, [$this,onEventName1]); $event-listen(EventName2, [$this,onEventName1]); } }手动注册Controller内的业务代码// 订阅并触发其中的事件函数。 Event::subscribe(\app\subscribe\订阅类::class); Event::trigger(EventName, [$params])自动注册在event.php文件定义subscribe数组中的订阅类subscribe [ \app\subscribe\订阅类::class ]Controller内的业务代码Event::trigger(EventName, [$params])注意如果订单类里同时有on[EventName1]和subscribe函数那么事件触发只会调用subscribe函数。代码结构执行效果事件绑定事件类event目录下一个普通类的实现代码手动注册Controller内的业务代码Event::bind([UserLogin app\event\事件类]); // 这里要用 字符串 来写事件类 Event::listen(UserLogin, \app\listener\监听类::class); //这里要用 监听类::class 来写监听类 Event::trigger(new 事件类()); //事件类传不传参看事件类的构造函数自动注册在event.php文件定义bind数组中的事件名和事件类绑定关系bind [ // EventName [\app\event\事件类::class] // 这里不能用数组会出错。 原来的写错了用了数组表示 EventName \app\event\事件类::class ] listen [ EventName [ \app\listener\监听类::class ] ],Controller内的业务代码Event::trigger(new 事件类());【重要】你会发现没有传递EventName参数。相当于trigger函数传递了哪个事件类就会反查到EventName建立与listen数组对应的关系然后再调用监听类里的handle($event)方法。这时候handle函数中的$event就是事件类的实例了可以直接调用事件类里定义的方法完成操作。其他监听类里只有一个handle方法当执行下面代码时会自动调用这个handle方法Event::listen(EventName, \app\listener\监听类::class); Event::trigger(EventName, $params);如果想交给其他类的某个方法可以用下面的方法Event::listen(EventName, [\path\to\other类::class, methodname]);如果不想定义这么多类监听时可以直接定义一个事件处理函数Event::listen(Email, function($param){ echo send email to . $param[name]; }); Event::trigger(Email, [name李四, age30]);
thinkphp8中事件的使用
thinkphp8中事件的使用**事件使用主要有事件监听、事件订阅、事件绑定三种方式**生成相关类的命令行什么是自动注册什么是手动注册事件监听监听类listener目录下的文件手动注册自动注册事件订阅订阅类subscribe目录下手动注册自动注册事件绑定事件类event目录下手动注册自动注册【重要】其他事件使用主要有事件监听、事件订阅、事件绑定三种方式生成相关类的命令行php think make:event 事件类名 php think make:listener 监听类名 php think make:subscribe 订单类名什么是自动注册event.php在框架加载的时候会自动载入在event.php文件中事先做一些处理定义listen数组中的事件名和对应的事件处理类定义subscribe数组中的订阅类定义bind数组的事件名和对应类什么是手动注册就是在控制器业务代码内写事件的监听和触发的代码可以不用管event.php文件。事件订阅 Event::subscribe(…)事件监听 Event::listen(…)触发事件 Event::trigger(…)事件监听就像html文档中dom.addEventlistener(“click”, 事件处理函数)。然后当你点击dom的时候就会执行事件处理函数监听类listener目录下的文件class EventName{ public function handle($event){ //这时候的$event应该是传过来的参数 } }手动注册在Controller内的业务代码写 事件监听和事件触发。// 相当于是dom.addEventlistener(click, 事件处理函数)。只是监听你不点击我也不执行。 Event::listen(EventName, \app\listener\监听类::class); // 相当于你点击dom会自动运行监听类里handle函数。 // 一般发问下 监听类 和 事件名 是一样的但是含义不同也可以不同名。例如 Event::lister(UserLogin,\app\listener\UserLogin::class) Event::trigger(UserLogin, [$params])自动注册在event.php文件定义listen数组中的事件名和对应的事件处理类// 相当于是dom.addEventlistener(click, 事件处理函数)。只是监听你不点击我也不执行。 listen [ EventName [\app\subscribe\监听类::class] //一定是数组一个事件可以绑定多个监听处理类 ]Controller内的业务代码只用触发事件就可以了。Event::trigger(EventName, [$params])事件订阅就你一个事件监听中心一样。只要subscribe了一个订阅类然后就可以触发其中事件处理函数。订阅类subscribe目录下use think\Event; class subName{ public function onEventName1($params){} public function onEventName2($params){} public function subscribe(Event $event) { $event-listen(EventName1, [$this,onEventName1]); $event-listen(EventName2, [$this,onEventName1]); } }手动注册Controller内的业务代码// 订阅并触发其中的事件函数。 Event::subscribe(\app\subscribe\订阅类::class); Event::trigger(EventName, [$params])自动注册在event.php文件定义subscribe数组中的订阅类subscribe [ \app\subscribe\订阅类::class ]Controller内的业务代码Event::trigger(EventName, [$params])注意如果订单类里同时有on[EventName1]和subscribe函数那么事件触发只会调用subscribe函数。代码结构执行效果事件绑定事件类event目录下一个普通类的实现代码手动注册Controller内的业务代码Event::bind([UserLogin app\event\事件类]); // 这里要用 字符串 来写事件类 Event::listen(UserLogin, \app\listener\监听类::class); //这里要用 监听类::class 来写监听类 Event::trigger(new 事件类()); //事件类传不传参看事件类的构造函数自动注册在event.php文件定义bind数组中的事件名和事件类绑定关系bind [ // EventName [\app\event\事件类::class] // 这里不能用数组会出错。 原来的写错了用了数组表示 EventName \app\event\事件类::class ] listen [ EventName [ \app\listener\监听类::class ] ],Controller内的业务代码Event::trigger(new 事件类());【重要】你会发现没有传递EventName参数。相当于trigger函数传递了哪个事件类就会反查到EventName建立与listen数组对应的关系然后再调用监听类里的handle($event)方法。这时候handle函数中的$event就是事件类的实例了可以直接调用事件类里定义的方法完成操作。其他监听类里只有一个handle方法当执行下面代码时会自动调用这个handle方法Event::listen(EventName, \app\listener\监听类::class); Event::trigger(EventName, $params);如果想交给其他类的某个方法可以用下面的方法Event::listen(EventName, [\path\to\other类::class, methodname]);如果不想定义这么多类监听时可以直接定义一个事件处理函数Event::listen(Email, function($param){ echo send email to . $param[name]; }); Event::trigger(Email, [name李四, age30]);