当前位置: 首页 > news >正文

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

thinkphp8 从入门到放弃

    • 引言 thinkphp* 大道至简
    • 一、 thinkphp8 安装
        • 安装Composer
        • thinkphp 安装命令(tp-项目名称)
        • 多应用安装(一个项目不会只有一个应用)
        • 安装完文件目录如下
        • 本地部署配置伪静态
        • 好了项目可以run
    • 二、架构
        • 服务(Service)
        • 门面(Facade)
        • token 创建(使用php-jwt)

引言 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

安装完文件目录如下

在这里插入图片描述

本地部署配置伪静态
<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
安装完如下图:
在这里插入图片描述

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");  //根据参数生成了 tokenreturn $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;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python标识符和关键字
  • 【病毒分析】新兴TOP2勒索软件!存在中国受害者的BianLian勒索软件解密原理剖析
  • Python精选200Tips:166-170
  • 如何确定SAP 某些凭证或者单号的号码编码范围的 OBJECT 是什么?
  • Selenium与数据库结合:数据爬取与存储的技术实践
  • UE学习篇ContentExample解读------Blueprint_Communication-上
  • Leecode刷题之路从今天开始
  • 吸尘器制造5G智能工厂物联数字孪生平台,推进制造业数字化转型
  • 经验——CLion通过SSH远程开发__imx6ull的linux开发
  • 【MySQL】数据库基础认识
  • 分区与分桶
  • PlayerPerfs-不同平台的存储位置
  • 最大似然估计,存在即合理
  • Python自动化测试中替代Seleium库的解决方案
  • JSONC:为JSON注入注释的力量
  • Google 是如何开发 Web 框架的
  • Apache的基本使用
  • echarts花样作死的坑
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • js
  • Laravel5.4 Queues队列学习
  • leetcode386. Lexicographical Numbers
  • Less 日常用法
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • python docx文档转html页面
  • Swoft 源码剖析 - 代码自动更新机制
  • ⭐ Unity + OpenCV 实现实时图像识别与叠加效果
  • Xmanager 远程桌面 CentOS 7
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 对象管理器(defineProperty)学习笔记
  • 工作手记之html2canvas使用概述
  • 如何进阶一名有竞争力的程序员?
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 使用common-codec进行md5加密
  • #HarmonyOS:Web组件的使用
  • $.ajax中的eval及dataType
  • (6)添加vue-cookie
  • (Python第六天)文件处理
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net core 外观者设计模式 实现,多种支付选择
  • .NET NPOI导出Excel详解
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET的数据绑定
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .stream().map与.stream().flatMap的使用
  • @antv/g6 业务场景:流程图
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • [C/C++随笔] char与unsigned char区别
  • [CareerCup] 14.5 Object Reflection 对象反射
  • [codeforces] 25E Test || hash