多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## **一、省略事件类的demo** >[info] 确定触发事件的地方,这里为index控制器index方法 ``` <?php namespace app\admin\controller; use app\BaseController; use think\facade\View; use think\facade\Event; class Index extends BaseController { public function index() { echo "开始位置<br>"; //模拟数据 $user=new \stdClass(); $user->id=1; $user->name="tom"; $user->password="123"; //直接使用事件类触发 Event::trigger('UserLogin',$user); echo "<br>结束位置<br>"; } } ``` >[info] 注册监听(admin/event.php定义) >app/admin/event.php ``` <?php // 事件定义文件 return [ 'bind' => [ ], 'listen' => [ 'UserLogin' => ['\app\admin\listener\UserLogin'], ], 'subscribe' => [ ], ]; ``` >[info] 定义监听类 >app/admin/listener/UserLogin.php ``` <?php namespace app\admin\listener; class UserLogin { public function handle($user) { var_dump($user); } } ``` >浏览器输出结果 ``` 开始位置 object(stdClass)#36 (3) { \["id"\]=> int(1) \["name"\]=> string(3) "tom" \["password"\]=> string(3) "123" } 结束位置 ``` >完结撒花 ## **二、动态监听demo** >[info] 确定触发事件的地方,这里为index控制器index方法 ``` <?php namespace app\admin\controller; use app\BaseController; use think\facade\View; use think\facade\Event; class Index extends BaseController { public function index() { echo "开始位置<br>"; //模拟数据 $user=new \stdClass(); $user->id=1; $user->name="tom"; $user->password="123"; //手动注册监听 必须在事件触发器之前定义 Event::listen('UserLogin', '\app\admin\listener\UserLogin'); //直接使用事件类触发 Event::trigger('UserLogin',$user); echo "<br>结束位置<br>"; } } ``` >[info] 定义监听类 >app/admin/listener/UserLogin.php ``` <?php namespace app\admin\listener; class UserLogin { public function handle($user) { var_dump($user); } } ``` >浏览器输出结果同上