### 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',
~~~
~~~