狂团KtAdmin框架开发文档

狂团KtAdmin框架开发文档


本地应用开发

<h4>1. 目录结构</h4> <p>目录结构和thinkphp6常用结构一致.</p> <p>www WEB部署目录 ├─app 应用目录 │ ├─app_name 应用目录 │ │ ├─common.php 函数文件 │ │ ├─controller 控制器目录 │ │ ├─model 模型目录 │ │ ├─view 视图目录 │ │ ├─config 配置目录 │ │ ├─route 路由目录 │ │ └─ ... 更多类库目录</p> <hr /> <h4>2. 模板文件</h4> <p>前后端分离时,把编译后代码放到public/app/demo目录下 (demo为你的应用名称)</p> <h4>3. 静态文件</h4> <p>如果是非前后端分离模式,则需把 静态文件放到 public/static/demo(应用名)目录下, 引用时按照tp6框架正常引用即可</p> <blockquote> <p>【本地开发模式下】直接将资源文件放到public/static/demo 下面即可 (demo为你的应用名称)</p> </blockquote> <h4>4.插件配置文件 manifest.xml</h4> <p>详见https://www.showdoc.com.cn/2068549701394518/9377743196801972</p> <hr /> <h4>5. 中间件</h4> <p>应用开发如果需要和框架的验证保持一致, 需添加应用中间件,中间件代码示例如下:</p> <p>建议: 1.应用有管理后台, 建议写两个中间件以便区分不同的token验证, token是唯一值,通过token匹配用户或者管理员,每次请求将会把token有效期自动往后加 有效期</p> <p>2.前后端分离建议token缓存到本地,请求接口时token放到Header中;前后端不分离建议token缓存到服务器端(Session默认未开启,建议在应用中间件定义文件中开启)</p> <pre><code class="language-php">&lt;?php declare (strict_types = 1); namespace app\demo\middleware; use think\facade\Db; use think\facade\Session; class admincheck { protected $whiteList = [ '/', ]; /** * 处理请求 * * @param \think\Request $request * @param \Closure $next * @return Response */ public function handle($request, \Closure $next) { //前后端分离建议token缓存到本地,请求接口时token放到Header中(注意要注释掉下面session部分) //$token = $request-&gt;header('AdminToken'); //前后端不分离建议token缓存到服务器端(Session默认未开启,建议在应用中间件定义文件中开启) $token = Session::get('AdminToken'); if(request()-&gt;get('token')){ Session::set('AdminToken',request()-&gt;get('token')); return redirect($request-&gt;domain().$request-&gt;baseUrl()); } $url = strtolower($request-&gt;baseUrl()); //获取url地址, 不带域名,然后小写, if(in_array($url,$this-&gt;whiteList)) return $next($request); if(!$token) return error('缺少参数UserToken'); $admin = Db::table('kt_base_agent')-&gt;where([['agency_token', '=', $token],['expire_time','&gt;',time()]])-&gt;find(); if(!$admin) return error('无效的UserToken'); Db::table('kt_base_agent')-&gt;where('id',$admin['id'])-&gt;update(['expire_time'=&gt; time() + (7*24*3600)]); return $next($request); } } </code></pre> <pre><code class="language-php">&lt;?php declare (strict_types = 1); namespace app\demo\middleware; use think\facade\Db; use think\facade\Session; class check { protected $whiteList = [ '/', ]; /** * 处理请求 * * @param \think\Request $request * @param \Closure $next * @return Response */ public function handle($request, \Closure $next) { //前后端分离建议token缓存到本地,请求接口时token放到Header中(注意要注释掉下面session部分) //$token = $request-&gt;header('UserToken'); //前后端不分离建议token缓存到服务器端(Session默认未开启,建议在应用中间件定义文件中开启) $token = Session::get('UserToken'); if(request()-&gt;get('token')){ Session::set('UserToken',request()-&gt;get('token')); return redirect($request-&gt;domain().$request-&gt;baseUrl()); } $url = strtolower($request-&gt;baseUrl()); //获取url地址, 不带域名,然后小写, if(in_array($url,$this-&gt;whiteList)) return $next($request); if(!$token) return error('缺少参数UserToken'); $user = Db::table('kt_base_user')-&gt;where([['token', '=', $token],['expire_time','&gt;',time()]])-&gt;find(); if(!$user) return error('无效的UserToken'); Db::table('kt_base_user')-&gt;where('id',$user['id'])-&gt;update(['expire_time'=&gt; time() + (7*24*3600) ]); return $next($request); } }</code></pre> <hr /> <h4>6. 基础控制器</h4> <p>通过token,获取相应用户信息或者管理员信息</p> <p>代码示例如下:</p> <pre><code class="language-php"> &lt;?php namespace app\demo\controller; use app\BaseController; use think\facade\Db; use think\Request; use think\facade\Session; class BaseAdmin extends BaseController { protected $req; protected $admin; protected $uid; protected $token; protected $host; public function __construct(Request $request){ if(Session::has('uid')) Session::delete('uid'); $this-&gt;req = $request; $this-&gt;host = $request-&gt;host(); //$this-&gt;token = $this-&gt;req-&gt;header('AdminToken'); $this-&gt;token = Session::get('AdminToken'); $this-&gt;admin = Db::table('kt_base_agent')-&gt;where([['agency_token', '=', $this-&gt;token], ['expire_time', '&gt;',time()]])-&gt;find(); if($this-&gt;admin){ $this-&gt;uid = $this-&gt;admin['id']; Session::set('uid',$this-&gt;admin['id']); } } }</code></pre> <pre><code class="language-php"> &lt;?php namespace app\demo\controller; use app\BaseController; use think\facade\Db; use think\Request; use think\facade\Session; class BaseUser extends BaseController { protected $req; protected $user; protected $wid; protected $token; public function __construct(Request $request){ $this-&gt;req = $request; $this-&gt;host = $request-&gt;host(); $url = $request-&gt;url(); //$this-&gt;token = $this-&gt;req-&gt;header('UserToken'); $this-&gt;token = Session::get('UserToken'); $this-&gt;user = Db::table('kt_base_user')-&gt;where([['token', '=', $this-&gt;token], ['expire_time', '&gt;',time()]])-&gt;find(); if($this-&gt;user){ $this-&gt;wid = $this-&gt;user['id']; Session::set('wid',$this-&gt;user['id']); Session::set('uid',$this-&gt;user['agid']); } } }</code></pre> <hr /> <h4>7. 应用的路由配置route.php(这里主要体现路由中间件的注册方式)</h4> <pre><code class="language-php">&lt;?php use think\facade\Route; /** * 管理后台 */ Route::group('admin', function () { Route::any('/index', 'admin.index/index'); //首页 })-&gt;middleware(app\demo\middleware\admincheck::class); /** * 用户后台 */ Route::group('user',function(){ Route::any('/index', 'user.index/index'); //首页 })-&gt;middleware(app\demo\middleware\check::class);</code></pre>

页面列表

ITEM_HTML