thinkphp8 从入门到放弃(后面会完善用到哪里写到哪)

thinkphp8 从入门到放弃

引言 thinkphp* 大道至简

感谢thinkphp 开发团队,多年的努力 一直在更新。
TP8 看云手册-点击进入看云

一、 thinkphp8 安装

安装Composer

访问Composer官方网站(https://getcomposer.org/),下载适合您操作系统的安装程序。
运行安装程序:Windows: 双击下载的composer-setup.exe文件,然后按照向导操作。

thinkphp 安装命令(tp-项目名称)

composer create-project topthink/think tp(项目名称自己定义即可)

多应用安装(一个项目不会只有一个应用)

如果要使用多应用模式,你需要安装多应用模式扩展think-multi-app。

composer require topthink/think-multi-app

安装完文件目录如下
本地部署配置伪静态
php 复制代码
<IfModule mod_rewrite.c> 
Options +FollowSymlinks -Multiviews 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] 
</IfModule>
好了项目可以run

二、架构

服务(Service)

负责具体的业务逻辑实现,将原本控制器的负责流程按模块拆分为一个个小的服务,方便给控制器层组合调用,一般不要跨模块调用服务,服务中可以调用本模块的仓库层方法

门面(Facade)
token 创建(使用php-jwt)

PHP JWT(JSON Web Token)是一种用于身份验证和授权的开放标准。JWT是一个包含有关用户或实体身份信息的安全令牌,它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。

为什么不建议你使用 JWT

JWT 的生成和解码都不涉及到存储(对 MySQL 或者 Redis 的访问获取),所以如果你存在拉黑或禁止某生成的令牌,则 JWT 不适合你的业务。

因为,JWT 不涉及存储,如果涉及,那就不是 JWT。

千万,不要为了用而用。
composer require firebase/php-jwt

安装完如下图:

php 复制代码
use \Firebase\JWT\JWT;
use \Firebase\JWT\Key;

//生成验签
function signToken($uid, $type)
{
    $key = Config::get('app.salt') . $type;//这里是自定义的一个随机字串,应该写在config文件中的,解密时也会用,相当    于加密中常用的 盐  salt
    $token = array(
        "iss" => $key,        //签发者 可以为空
        "aud" => '',          //面象的用户,可以为空
        "iat" => time(),      //签发时间
        "nbf" => time() + 3,    //在什么时候jwt开始生效  (这里表示生成100秒后才生效)
        "exp" => time() + 86400, //token 过期时间
        "data" => [           //记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对
            'uid' => $uid,
            'type' => $type
        ]
    );
    $jwt = JWT::encode($token, $key, "HS256");  //根据参数生成了 token
    return $jwt;
}

//验证token
function checkToken($token, $type)
{
    $key = Config::get('app.salt') . $type;
    $status = array("code" => -1);
    try {
        JWT::$leeway = 60;//当前时间减去60,把时间留点余地
        $decoded = JWT::decode($token, new Key($key, 'HS256')); //HS256方式,这里要和签发的时候对应
        $arr = json_decode(json_encode($decoded), 1);
        $res['code'] = 1;
        $res['data'] = $arr['data'];
        return $res;
    } catch (\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
        $status['msg'] = "签名不正确";
        return $status;
    } catch (\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用
        $status['msg'] = "token失效";
        return $status;
    } catch (\Firebase\JWT\ExpiredException $e) { // token过期
        $status['msg'] = "token失效";
        return $status;
    } catch (Exception $e) { //其他错误
        $status['msg'] = "未知错误";
        return $status;
    }
}
相关推荐
evoxwht3 小时前
给 CRMEB V8 接一个 S3 兼容存储驱动
php
北京中科新远科技8 小时前
高速交换机端口预算怎么做?下行、上联、拆分和冗余计算框架
开发语言·php
其实防守也摸鱼9 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php
可涵不会debug15 小时前
PHP2Shell 爆发一周后:CVE-2026-109618/109619 自查、修复与防护实录
安全·php·云安全·waf·phpshell
一支蜉蝣15 小时前
Day26 XD安全学习笔记--PHP 应用&模版引用&Smarty渲染&MVC 模型&数据联动&RCE 安全
笔记·网络安全·html·php
vipxieliang16 小时前
PHP 中的设计模式:工厂模式与单例
php
vipxieliang16 小时前
ThinkPHP 8.0 注解路由实战:PHP 8 原生 Attribute 方案
php·thinkphp
evoxwht17 小时前
给 CRMEB v8 商品中台加一个「课程」商品类型
php
evoxwht18 小时前
给 CRMEB V8 给 MCP 服务加一个分销工具
php
IT召唤狮1 天前
开源企业级零信任项目Pangolin,零信任能挡住PHP核弹漏洞吗?
开发语言·开源·php