Thinkphp6 + vue-element-admin 后台管理快速建站-TP篇 1

参考thinkphp官方文档
thinkphp 6 官方文档


1.下载thinkphp 6作为模板

composer create-project topthink/think 【you project name】 6.0.*


2.安装多应用

2.1 安装扩展
        

composer require topthink/think-multi-app

2.2修改目录结构
        app 应用目录
        │  ├─index              主应用
        │  │  ├─controller      控制器目录
        │  │  ├─model           模型目录
        │  │  ├─view            视图目录
        │  │  ├─config          配置目录
        │  │  ├─route           路由目录
        │  │  └─ ...            更多类库目录
        │  │ 
        │  ├─admin              后台应用
        │  │  └─ ... 


3.安装 apidoc ---自动api文档

3.1执行安装命令

  composer require hg/apidoc

3.2下载 apidoc ui

参考apidoc文档

apidoc 使用文档​​​​​​​​​​​​​​
      打开浏览器访问 http://你的域名/apidoc/index.html ,出现接口文档页面,表示安装成功
3.3使用    

<?php

namespace app\admin\controller;

use app\admin\service\AdminService;
use app\BaseController;
use think\App;

//apidoc 引入
use hg\apidoc\annotation as Apidoc;

/**
 * @Apidoc\Title("管理员管理")
 */
class AdminController extends BaseController
{
    public function __construct(App $app,AdminService $service)
    {
        $this->service = $service;
        parent::__construct($app);
    }
    /**
     * @Apidoc\Title("基础的接口演示")
     * @Apidoc\Tag("基础,示例")
     * @Apidoc\Method ("GET")
     * @Apidoc\Url ("/admin/adminCurl/adminlist")
     * @Apidoc\Query("name", type="string",require=true, desc="姓名",mock="@name")
     * @Apidoc\Query("phone", type="string",require=true, desc="手机号",mock="@phone")
     * @Apidoc\Returned("id", type="int", desc="Id")
     */
    public function getList(){
        return json('aaa');
    }
}

4.数据库---数据库迁移

4.1安装扩展

composer require topthink/think-migration

4.2创建和使用
        //执行命令,创建一个操作文件,一定要用大驼峰写法,如下

php think migrate:create AnyClassNameYouWant

//执行完成后,会在项目根目录多一个database目录,这里面存放类库操作文件
//文件名类似/database/migrations/20190615151716_any_class_name_you_want.php
4.3执行迁移工具
        4.3.1执行迁移

php think migrate:run

        4.3.2回退迁移

php think migrate:rollback


5.添加JWT - Token验证

 5.1安装扩展        

composer require firebase/php-jwt

5.2使用创建php    JWTtoken.php  用于创建,解析token
 

<?php

namespace app\tool;

use Exception;
use Firebase\JWT\BeforeValidException;
use Firebase\JWT\ExpiredException;
use Firebase\JWT\SignatureInvalidException;
use \Firebase\JWT\JWT;
use Firebase\JWT\Key;


trait JWTtoken
{


    /**
     * 生成验签
     * @param $data
     * @return mixed
     */
    public function signToken($data)
    {
        $key = 'abcdefg';         //自定义的一个随机字串用户于加密中常用的 盐  salt
        $token = array(
            "iss" => $key,        //签发者 可以为空
            "aud" => '',          //面象的用户,可以为空
            "iat" => time(),      //签发时间
            "nbf" => time(),      //在什么时候jwt开始生效
            "exp" => time() + 3600,  //token 过期时间
            "data" => $data           //记录的信息
        );
        $jwt = JWT::encode($token, $key, "HS256");  //生成了 token
        return $jwt;
    }

    /**
     * 验证token
     * @param $token
     * @return array|int[]
     */
    public function checkToken($token)
    {
        $key = 'abcdefg';     //自定义的一个随机字串用户于加密中常用的 盐  salt
        $res['status'] = false;
        try {
            JWT::$leeway = 60;//当前时间减去60,把时间留点余地
            $decoded = JWT::decode($token, new Key($key, 'HS256')); //HS256方式,这里要和签发的时候对应
            $arr = (array)$decoded;
            $res['status'] = 200;
            $res['data'] = (array)$arr['data'];
            return $res;

        } catch (SignatureInvalidException $e) { //签名不正确
            $res['message'] = "签名不正确";
            return $res;
        } catch (BeforeValidException $e) { // 签名在某个时间点之后才能用
            $res['message'] = "token失效";
            return $res;
        } catch (ExpiredException $e) { // token过期
            $res['message'] = "token过期";
            return $res;
        } catch (Exception $e) { //其他错误
            $res['message'] = "未知错误";
            return $res;
        }
    }
}

6.中间件

6.1创建中间件--命令        

php think make:middleware CheckToken

执行命令会在app/middleware中创建一个CheckToken.php文件

6.2中间件验证token

在创建的中间件文件中编写代码验证token,可以在需要的地方使用

<?php
declare (strict_types=1);

namespace app\middleware;

use app\tool\JWTtoken;

class CheckToken
{
    use JWTtoken;

    /***
     * @param $request
     * @param \Closure $next
     * @return mixed|\think\response\Json
     */
    public function handle($request, \Closure $next)
    {
        // 获取token
        $token = $request->header('X-Token');
        // 验证是否存在token
        if (empty($token)) {
            return json(['msg' => 'token为空', 'code' => '401']);
        } else {
            // JWT进行校验token
            $res = $this->checkToken($token);

            // token是否正确
            if ($res['status'] != 200) {
                return json(['message' => $res['message'], 'code' => '401']);
            }
            //将解析的数据存入request
            $request->userinfo = $res['data'];
        }
        return $next($request); //返回请求数据本身
    }
}

6.2 跨域中间件

执行命令创建一个中间件文件

php think make:middleware AllowCrossDomainMiddleware

编写代码如下

<?php

namespace app\middleware;
use think\middleware\AllowCrossDomain;
class AllowCrossDomainMiddleware extends AllowCrossDomain
{
    // 加入自定义请求头参数 X-Token
    protected $header = [
        'Access-Control-Allow-Credentials' => 'true',
        'Access-Control-Max-Age'           => 1800,
        'Access-Control-Allow-Methods'     => 'GET, POST, PATCH, PUT, DELETE, OPTIONS',
        'Access-Control-Allow-Headers'     => 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With, X-Token',
    ];

}

在全局中间件配置app/middleware.php  中引入     

<?php
// 全局中间件定义文件
use app\middleware\AllowCrossDomainMiddleware;

return [
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
    // \think\middleware\SessionInit::class
//    \think\middleware\AllowCrossDomain::class,
    AllowCrossDomainMiddleware::class
];

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值