ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 1.钩子的使用 与controller 文件同级创建 behavior文件夹,创建类(此类不需要集成任何类),run()方法,将权限或者日志逻辑放在钩子里。 ``` namespace app\admin\behavior; /*权限钩子*/ public function run($params) { $aid=$params['id']; if($aid==1){ $per=(new PermissionModel())->field(['id','name','url','pid','type'])->select()->toArray();//获取所有权限 }else{ $adminmodel=new AdminModel(); $role_ids=$adminmodel->where('id',$aid)->value('role_id'); $role_names=(new RoleModel())->where('id','in',$role_ids)->select(); $arr=[]; foreach($role_names as $k=>$v){ $perid=explode(',',$v['perid']); foreach($perid as $k1=>$v1){ array_push($arr,$v1); } } $arr=array_unique($arr); $per=(new PermissionModel())->field(['id','name','url','pid','type'])->where('id','in',$arr)->select()->toArray();//获取所属权限 } $arrs['url']='index/index'; $arrs['id']='9999'; $arrs['pid']='9999'; $arrs['name']='首页'; $arrs['type']=0; array_push($per,$arrs); session('routes',$per); } ``` ### 2. 控制器中或者模型中都可以调用钩子(此处是在登录模型中调用) ~~~ use think\facade\Hook; //引入钩子 session('aid',$info['id']); session('aname',$info['username']); $param['id']=$info['id']; //方法一: Hook::exec('app\admin\behavior\Rbac',$param); //直接执行钩子 //方法二: Hook::add('app_init','app\admin\behavior\Rbac');//绑定钩子 Hook::listen('app_init',$param);//监听钩子 ~~~ ### 3.使用场景: 权限菜单、日志文件 ### 4.验证码刷新 ``` ~~~ //视图 <div class="row cl"> <div class="formControls col-xs-8 col-xs-offset-3"> <input class="input-text size-L" name="code" type="text" placeholder="验证码" style="width:150px;"> <img class= 'reloadverify' src="{:url('login/verify')}"> </div> </div> //js $(function() { var verifyimg = $(".reloadverify").attr("src"); $(".reloadverify").click(function() { if (verifyimg.indexOf('?') > 0) { $(".reloadverify").attr("src", verifyimg + '&random=' + Math.random()); } else { $(".reloadverify").attr("src", verifyimg.replace(/\?.*$/, '') + '?' + Math.random()); } }); }); //控制器 ~~~ /** * 验证码方法 */ use think\captcha\Captcha; public function verify(){ $config = [ 'fontSize' => 30,// 验证码字体大小 'length' => 2, // 验证码位数 'useNoise' => false, // 关闭验证码杂点 'useCurve'=>false //关闭杂线 ]; $captcha = new Captcha($config); return $captcha->entry(); } ~~~ ``` ### 5.公用方法 ~~~ /* * @params $str * @params $arr * @return bool * 判断字符串是否在数组中,包括二维数组及多维数组*/ public function array_multi_search($str,$arr){ if(in_array($str,$arr)){ return true; } foreach($arr as $k=>$v){ if($this->array_multi_search($str,$v)){ return true; } } return false; } /* * @params $list * @params $pk * @params $pid * @params $root * @return array * 将数组转为树 * */ public function list_to_tree($list, $pk = 'id', $pid = 'pid', $root = 0){ $tree = array(); if (is_array($list)) { $refer = array(); foreach ($list as $key => $data) { $refer[ $data[ $pk ] ] = &$list[ $key ]; } foreach ($list as $key => $data) { // 判断是否存在parent $parentId = $data[ $pid ]; if ($root == $parentId) { $tree[ $data[ $pk ] ] = &$list[ $key ]; } else { if (isset($refer[$parentId])) { $parent = &$refer[ $parentId ]; $parent['child'][] = &$list[ $key ]; } } } } return $tree; } ~~~ ### 6.上传图片(单文件) ~~~ /** * 上传文件 */ use think\Request; public function upload() { // 获取表单上传文件 例如上传了001.jpg $file = request()->file('file'); // 移动到框架应用根目录/uploads/ 目录下 $info = $file->move( '../public/uploads'); if($info){ $path='/uploads/'.$info->getSaveName(); return ['code'=>1,'msg'=>'上传成功!','url'=>$path]; }else{ return ['code'=>0,'msg'=>$file->getError()]; } } ~~~ ### 7.tp5.1创建控制器、模型、验证器 php think make:controller admin/Index php think make:model admin/IndexModel php think make:validate admin/IndexValidate ### 8.tp5.1 简单配置 app.php ~~~ // 应用调试模式 'app_debug' => true, // 应用Trace 'app_trace' => true, // 默认AJAX 数据返回格式,可选json xml ... 'default_ajax_return' => 'json', ~~~ database.php ~~~ // 自动写入时间戳字段 'auto_timestamp' => true, // 时间字段取出后的默认时间格式 'datetime_format' => 'Y-m-d H:i:s', ~~~ ~~~