企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
这里简单介绍一下如何注入事件,thinkphp 框架的钩子(行为)其实就是一个事件注册器,以 Auth.php 为例。可以将一些动作解耦出来,这里以 **记住** 的功能为例。 首先封装一下 **hook** 的调用,app\common.php 文件, 封装一个 hook function ``` if (!function_exists('hook')) { function hook($tag, $params) { return \think\facade\Hook::listen($tag, $params); } } ``` 因为该行为只是在 **admin** 模块下使用, 所以在 admin 模块下创建行为目录。![](https://box.kancloud.cn/834f39d7269ee2b39c159f885bc88b8a_363x96.png) 如图建立一个 **LoginRememberBehavior.php**, 内容如下 ```php namespace app\admin\behavior; use think\facade\Cookie; class LoginRememberBehavior { public function run($params) { if ($params['remember_token']) { $params['user']->remember_token = $params['remember_token']; Cookie::forever('remember_token', $params['remember_token']); } $params['user']->login_at = date('Y-m-d h:i:s', time()); $params['user']->login_ip = request()->ip(); $params['user']->save(); } } ``` 好了,钩子创建好之后还需要在 app\tags.php 注册。 ``` 'loginRemember' => app\admin\behavior\LoginRememberBehavior::class, ``` 注册完成之后就可以直接使用了,在 Auth 中使用,找到 **loginRemember** 方法。 ``` protected function loginRemember($user, Request $request) { $params['user'] = $user; $params['remember_token'] = null; if ($request->has('remember')) { $params['remember_token'] = $this->secretRememberToken($user->id, $this->generateRememberToken()); } hook('loginRemember', $params); } ``` 这样就可以将 **LoginRemember** 功能独立出去了, 当然这里只是以其中一个功能为例。以后还可以扩展各种各样的行为,可以降低你项目功能之间耦合。以上就是建立钩子的以及使用的过程