PHP8、ThinkPHP8框架中间的应用教程详解

前言

虽然PHP的落幕的话题一直不绝,但是实际在WEB端项目中PHP占有率达到了70%以上,一直在WEB一枝独秀,它以快速、高效的开发闻名,出圈了几十年,等待只是下一次的涅槃。而经过PHP8、PHP9的演变发展,PHP逐渐从弱类型语言走向强类型语言,只是它的历史包袱太重,所以每一次的翻身都是缓慢而剧烈,所以我们接下来期待它的涅槃成功。而PHP之所以在诞生以来受多方关注和使用,除了刚才说的特性,还有就是它的社区很完善,优秀的开源框架也比比皆是,每一款框架都有自己的特性和应用场景,让开发者免于苦恼的选择,如以下几种的框架:Laravel(PHP框架老大哥)、Symfony、CodeIgniter、Yii、Phalcon、Swoole、Wookerman以及本期要聊的ThinkPHP(注:后面我们单独做一篇PHP框架大全文章,这里就不赘言),说的TP它的命运也和PHP类似,一直被诟病一直在被使用,在这里我就不去拉架了,反正也劝不住,只是想说TP自从升级到6版本以后,它的整体的设计理念得到了极大的提升,已经和著名的PHP框架接轨,接下来我们来聊一下TP框架安装和中间件的应用,ThinkPHP8框架的应用教程详解可以涵盖多个方面,包括环境搭建、框架安装、项目结构、开发流程以及实际应用等。详情见官方教程

在这里插入图片描述

一、环境搭建

  1. 安装PHP8

    • 确保PHP版本为8.x,因为ThinkPHP8支持PHP8的强类型特性。
    • 可以使用XAMPP、WAMP等集成环境来快速搭建PHP环境,这些环境通常包含了Apache或Nginx服务器、PHP和MySQL数据库。
  2. 安装MySQL数据库

    • 安装MySQL 8.x版本,因为ThinkPHP8支持较新版本的MySQL数据库。
    • 配置数据库连接信息,包括服务器地址、数据库名、用户名和密码等。
  3. 安装Composer

    • Composer是PHP的一个依赖管理工具,用于管理项目的依赖库。
    • 访问Composer官网下载并安装Composer。

二、ThinkPHP8框架安装

  1. 使用Composer安装ThinkPHP8

    • 打开命令行工具,切换到项目根目录。
    • 执行命令composer create-project topthink/think your_project_name来安装ThinkPHP8框架,其中your_project_name是你的项目名称。
    • 如果安装过程中遇到超时问题,可以尝试修改Composer的镜像源为国内源,如阿里云镜像。
  2. 验证安装

    • 安装完成后,在浏览器中访问http://localhost/your_project_name/public/(假设你的项目部署在本地服务器),如果看到ThinkPHP的欢迎页面,说明安装成功。
      在这里插入图片描述

三、项目结构

ThinkPHP8的项目结构通常包括以下几个主要目录:

  • app:应用目录,包含控制器、模型、视图等应用代码。
  • config:配置目录,存放项目的配置文件。
  • public:公共目录,对外访问的入口文件(如index.php)和静态资源文件(如CSS、JS、图片等)都放在这里。
  • route:路由目录,用于定义URL路由规则。
  • vendor:Composer管理的依赖库目录。

四、开发流程

  1. 创建控制器

    • app/controller目录下创建控制器文件,例如Index.php
    • 控制器中定义方法,用于处理不同的请求。
  2. 创建视图

    • app/view目录下创建与控制器对应的视图文件。
    • 视图文件用于展示数据给用户。
  3. 配置路由

    • route/route.php文件中配置路由规则,将URL映射到控制器和方法上。
  4. 数据库操作

    • 使用ThinkPHP8的数据库类(如Db类)或ORM模型进行数据库操作。
    • 配置数据库连接信息在config/database.php文件中。
  5. 启动项目

    • 在命令行中切换到项目根目录,执行php think run命令启动内置服务器。
    • 访问http://localhost:8000/(默认端口为8000)来查看项目。

五、实际应用

在实际应用中,你可能需要根据项目需求进行更多的配置和开发工作,例如:

  • 用户认证:实现用户注册、登录、注销等功能。
  • 权限控制:根据用户角色控制访问权限。
  • API开发:开发RESTful API供前端或其他系统调用。
  • 模板引擎:使用ThinkPHP8内置的模板引擎或第三方模板引擎来渲染视图。
  • 缓存机制:使用Redis、Memcached等缓存技术提高应用性能。

六、中间件应用

在ThinkPHP6、8中,路由中间件(Middleware)是一种强大的机制,允许你在请求处理流程中的不同阶段执行代码。这可以用于多种目的,如登录授权、日志收集、响应处理等。下面将详细介绍如何在ThinkPHP8中使用中间件来实现登录授权和日志收集。官方教程

1. 创建中间件

首先,你需要创建中间件类。在ThinkPHP8中,中间件通常存放在app/middleware目录下(如果目录不存在,你需要手动创建它)。

登录授权中间件
// 文件位置:app/middleware/Auth.phpnamespace app\middleware;class Auth
{public function handle($request, \Closure $next){// 检查用户是否已登录,这里只是一个示例// 实际应用中,你可能需要从Session、Token或其他认证机制中获取用户信息if (!session('user_id')) {// 用户未登录,返回错误信息或重定向到登录页面return redirect('login/index')->with('error', '请先登录');}// 用户已登录,继续处理请求return $next($request);}
}
日志收集中间件
// 文件位置:app/middleware/Log.phpnamespace app\middleware;use think\facade\Log;class Log
{public function handle($request, \Closure $next){// 在请求处理之前记录日志Log::record('请求开始:' . $request->url());$response = $next($request);// 在响应发送给客户端之后记录日志(如果需要的话)Log::record('请求结束:' . $request->url());return $response;}
}
2. 注册中间件

创建完中间件后,你需要在全局或路由级别注册它们,以便在请求处理流程中使用。

全局中间件

config/middleware.php配置文件中注册全局中间件。这意呀着每次请求都会经过这些中间件注意:全局中间件的使用需要谨慎,可以定义入参校验,例如收集日志,需要慎重考虑

// config/middleware.phpreturn [// 其他全局中间件...\app\middleware\Auth::class,\app\middleware\Log::class,
];
路由中间件

你也可以在路由定义中直接注册中间件,这样只有特定的路由才会经过这些中间件。

use think\facade\Route;// 使用闭包定义路由时直接添加中间件
Route::get('user/info', function () {// 路由处理逻辑
})->middleware(\app\middleware\Auth::class, \app\middleware\Log::class);// 或者在控制器路由中注册
Route::get('user/profile', 'UserController@profile')->middleware(\app\middleware\Auth::class);
3. 注意事项
  • 中间件的执行顺序很重要。在全局中间件配置文件中定义的中间件会按照数组中的顺序执行。
  • 如果你的应用有多个环境(如开发、测试、生产),你可能需要在不同环境中启用或禁用不同的中间件。这可以通过环境变量或配置文件来实现。
  • 在处理敏感信息(如用户认证)时,请确保你的中间件逻辑是安全的,并遵循最佳实践。
  • 日志收集中间件是一个很好的例子,展示了如何在请求处理流程的多个阶段记录信息。但是,请注意不要记录过多的日志,以免影响应用性能。
  • 日志收集中间件若是业务量大的话,最好使用异步收集方式,使用MQ、Kafka或者Redis队列处理,避免频繁操作数据库造成数据库性能下降,影响整个业务。

六、总结

综上所述,ThinkPHP8框架的应用开发需要掌握环境搭建、框架安装、项目结构、开发流程以及实际应用等多个方面的知识。通过不断学习和实践,你可以逐渐掌握这些技能,并开发出高效、稳定、可扩展的Web应用。说句题外话,你也认为PHP落幕了吗?在线等,急!哈哈哈哈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/415670.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux网络编程】协议|OSI模型|TCP/IP模型|局域网通信|跨网络通信|地址管理|流程图

目录 ​编辑 一,协议 协议分层 二,OSI七层模型 三,TCP/IP五层(或四层)模型 TCP/IP各个层次一些名词解释 为什么要有TCP/IP协议 TCP/IP协议栈与操作系统的宏观关系示意图 四,网络传输基本流程 局…

【书生大模型实战营】MindSearch CPU-only 版部署

MindSearch CPU-only 版部署 MindSearch CPU-only 版部署任务步骤 MindSearch CPU-only 版部署 任务 将 MindSearch 部署到 HuggingFace 并美化 Gradio 的界面,并提供截图和 Hugging Face 的Space的链接。 步骤 按照官方教程,实现在网页上打开MindSe…

llama_factory Qlora微调异常 No package metadata was found for The ‘autoawq‘

importlib.metadata.PackageNotFoundError: No package metadata was found for The ‘autoawq’ distribution was not found and is required by this application. To fix: pip install autoawq 其实问题比较简单 直接安装autoawq 即可 但是对应会有版本问题: 查…

Python自适应光学模态星形小波分析和像差算法

🎯要点 🎯星形小波分析像差测量 | 🎯对比傅里叶和小波分析 | 🎯定义多尺度图像质量度量,矩阵数据 | 🎯像差校正算法 | 🎯受激发射损耗显微镜布局 | 🎯干涉仪分支校准,求…

【unity实战】使用新版输入系统Input System+Rigidbody实现第三人称人物控制器(附项目源码)

最终效果 前言 使用CharacterController实现3d角色控制器,之前已经做过很多了: 【unity小技巧】unity最完美的CharacterController 3d角色控制器,实现移动、跳跃、下蹲、奔跑、上下坡、物理碰撞效果,复制粘贴即用 【unity实战】C…

快速入门Go:Go + gin + MongoDB

Go 进阶:Go + gin + MongDB 极速搭建EcommerceSys电商系统 前言 本章节适合有一定基础的 Golang 初学者,通过简单的项目实践来加深对 Golang 的基本语法和 Web 开发的理解。 本文章持续更新中,请关注… 项目结构 项目流程图 技术栈(待补充)项目结构项目路由 (待补充) …

DataWhale AI夏令营-《李宏毅深度学习教程》笔记-task3

DataWhale AI夏令营-《李宏毅深度学习教程》笔记-task2 第五章 循环神经网络5.1 独热编码5.2 RNN架构5.3 其他RNN5.3.1 Elman 网络 &Jordan 网络5.3.2 双向循环神经网络 第五章 循环神经网络 循环神经网络RNN,RNN在处理序列数据和时间依赖性强的问题上具有独特…

51单片机——实时时钟

1、DS1302介绍 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能 RTC(Real Time Clock):实时时钟,是一种集成电路,通常称为时钟…

机器学习项目——基于机器学习(RNN LSTM 高斯拟合 MLP)的锂离子电池剩余寿命预测方法研究(代码/论文)

完整的论文代码见文章末尾 以下为核心内容和部分结果 摘要 机器学习方法在电池寿命预测中的应用主要包括监督学习、无监督学习和强化学习等。监督学习方法通过构建回归模型或分类模型,直接预测电池的剩余寿命或健康状态。无监督学习方法则通过聚类分析和降维技术&…

VS-E5PH3006L-N3 600V 30A 高效低损耗整流器 二极管 电动 / 混动汽车电池充电的可靠之选

VS-E5PH3006L-N3参数特性: 反向电压(VR):600V,这表示该整流器在电路中能承受的最大反向电压为 600 伏特,超过此电压可能会导致器件损坏。平均整流电流(IF (AV)):30A&…

【系统架构设计】嵌入式系统设计(2)

【系统架构设计】嵌入式系统设计(2) 嵌入式网络系统嵌入式 Internet 的接入方式嵌入式 TCP/IP 协议栈 嵌入式数据库管理系统数据的一致性高效的事务处理数据的安全性 实时系统与嵌入式操作系统对实时系统划分根据实时性的强弱根据对错失时限的容忍程度或…

Linux学习-虚拟化平台安装和使用

注:系统使用Rock8.6 下载链接 通过百度网盘分享的文件:cirros.qcow2,node_base.xml等2个文件 链接:https://pan.baidu.com/s/1hupGQsMjrXMgngCy3lQLhw?pwdhlr6 提取码:hlr6[rootharbor ~]# cat /etc/redhat-releas…

《Class-Agnostic Counting》CVPR2018

概述 摘要:这篇论文提出了一种用于对象计数的模型,该模型能够计算任何类别的对象,而不需要针对特定对象类别进行设计。作者将计数问题表述为一个匹配问题,利用图像中自然存在的自相似性属性。论文的贡献包括:提出了一…

软件工程知识点总结(1):软件工程概述

1 什么是软件? 定义:计算机系统中的程序及其文档。 ——程序是计算机任务的处理对象和处理规模的描述; ——文档是为了便于了解程序所需要的阐明性资料。 2 软件的特点? 软件是无形的,不可见的逻辑实体 ——它的正确与…

人到中年,越发明白,随缘是成年人之间最好的社交状态

​时光荏苒,转眼间,我们已从青涩少年步入沉稳中年。 在这个阶段,我们经历了职场的起起落落,家庭的悲欢离合,也见证了身边人的种种变化。 正如屠格涅夫所言:“凡事只要看得淡些,就没有什么可忧…

C程序设计——指针杂谈0

变量和常量讲的差不多了,这里先把指针再深入理解一下,如果你是C语言初学者,本节可能看不太懂,没关系可以以后再看。 变量 当定义变量的时候,本质是在内存中分配了一段空间,这段空间的大小与变量的类型相关…

Hackme靶机通关攻略

1.首先注册用户,登录 2.登录后,显示让我们查找自己喜欢的书,我们直接单击search,会列出很多书 3.随便选择一本书进行查询,与此同时进行抓包 4.放到重放器中,将数据改为1*,将数据包另存为1.txt&a…

Python pip 更换镜像源

文章目录 1 概述1.1 默认镜像,速度慢,易报错1.2 常用国内镜像源 2 更改镜像源2.1 临时更改2.2 永久更改2.2.1 查看配置源及配置文件2.2.2 编辑 pip.ini2.2.3 配置后的效果 1 概述 1.1 默认镜像,速度慢,易报错 默认镜像&#xff…

Win32设备I/O详解

Windows设备 在Windows平台下,设备被定义为能够与之进行通信的任何东西。最常见的 I/O 设备包括:文件、文件流、目录、物理磁盘、卷、控制台缓冲区、磁带驱动器、通信资源、mailslot 和管道等。 平常我们使用的文件,目录都可以称之为设备。…

MES系统:现代工厂生产车间的科技与管理创新

一、现代工厂生产车间:高度集成、自动化与智能化 在当今这个日新月异的工业时代,工厂生产车间已经远远超越了传统意义上的简单生产线概念,它们正逐步演变为一个高度集成、自动化与智能化的生态系统。这一变革不仅极大地提升了生产效率&#…