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

news2024/11/15 11:45:16

前言

虽然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.php

namespace 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.php

namespace 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.php

return [
    // 其他全局中间件...
    \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.coloradmin.cn/o/2096627.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微软最新轻量级、多模态Phi-3.5-vision-instruct模型部署

Phi-3.5-vision-instruct是微软最新发布的 Phi-3.5 系列中的一个AI模型,专注于多模态任务处理,尤其是视觉推理方面的能力。 Phi-3.5-vision-instruct模型具备广泛的图像理解、光学字符识别(OCR)、图表和表格解析、多图像或视频剪…

【STM32】通用定时器TIM(输入捕获)

本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发 目录 前言 输入捕获简介 输入捕获配置 初始化IO口 输入捕获初始化 选择触发源及从模式 测量频率方法 输入捕获代码 IC.h IC.c 输入捕获测占空比 前言 建议先阅读这篇博客&#xf…

Open3D mesh 均值滤波

Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述 均值滤波(Mean Filtering)是一种基本的网格平滑技术,通过将每个顶点的位置替换为其邻域…

[ABC369C] Count Arithmetic Subarrays

首先看了下题意 大致题意就是让你在长度为的序列找出所有的等差数列。 -----------------------------------------------------------------------------------------我是分界线 我的思路了,就是先从2开始计算等差数列,从3开始判断,如果是…

C#从入门到精通(21)—Mutex互斥锁在多线程、多进程下的使用

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家!人工智能学习网站 前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任…

C语言调用子函数时入/出栈(保护/恢复现场)全过程分析:以Cortex-M3为例

0 参考资料&工具 Cortex M3权威指南(中文).pdf keil5(用于仿真查看寄存器、栈变化)1 C语言调用子函数时出入/出栈(保护/恢复现场)全过程分析 使用C语言调用子函数是如何保护/恢复现场的呢?本文以Cortex-M3为例&a…

Zynq之IIC使用示例

前言 明确设计思路,精准定位问题,对于我们后期理解迭代工程有很大的帮助。 这就是我们常说的40%设计,20%编写和剩下的40%时间进行调试优化。 今天为大家带来的是Zynq-PS端的IIC使用demo,通过驱动外设DS1337来强化对IIC的使用方…

【C++二分查找 贪心】1552. 两球之间的磁力

本文涉及的基础知识点 C二分查找 贪心:决策兼容性 LeetCode1552. 两球之间的磁力 在代号为 C-137 的地球上,Rick 发现如果他将两个球放在他新发明的篮子里,它们之间会形成特殊形式的磁力。Rick 有 n 个空的篮子,第 i 个篮子的位…

百日草花语探秘:天长地久的情感寄托与丰富内涵解析

百日草宛如一颗璀璨的明珠,散发着独特的魅力。它那鲜艳夺目的花朵,仿佛是大自然用最细腻的笔触勾勒而成,每一朵都蕴含着无尽的奥秘与情感。当我们漫步于花海之间,不经意间与百日草相遇,那绚烂的色彩和别致的形态定会让…

李沐动手学深度学习:树叶分类竞赛

视频地址:30 第二部分完结竞赛:图片分类【动手学深度学习v2】 竞赛地址:https://www.kaggle.com/competitions/classify-leaves !nvidia-smi # 查看 GPU 信息 # !lscpu # 查看 CPU 信息 # !free -h # 查看内存(RAM) 信息 # !p…

datax编译:解决datax不支持MongoDB 6.0.10的问题

1. 需求及问题 最近使用datax同步MongoDB中的数据到hive,使用了mongodbreader和hdfswriter插件。MongoDB的版本是6.0.10,而datax的默认编译安装包中mongodbreader插件不支持MongoDB 6.0.10。 DataX工具介绍数据同步工具之DataX-CSDN博客 官方地址 https://github.com/alib…

模型 U型思考法(深度思考)

系列文章 分享 模型,了解更多👉 模型_思维模型目录。探索本质,创新求解。 1 U型思考法的应用 1.1 小罐茶的品牌创新 背景: 小罐茶作为一家新兴的茶叶品牌,面临着传统茶叶市场的激烈竞争和消费者需求的多样化。为了在…

地震模板代码 - 第三部分

Seismic stencil codes - part 3 — ROCm Blogs (amd.com) 2024年8月12日,作者:Justin Chang 和 Ossian O’Reilly。 在前两篇博客文章中,我们开发了一个 HIP 内核,能够计算地震波传播中常用的高阶有限差分。经过优化后&#xf…

Redis KEY操作实战手册:从设计到维护的全面指南

​ 🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL》 💪🏻 制定明确可量化的目标,坚持默默的做事。 ✨欢迎加入探索Redis的key的相关操作之旅✨ 👋 大家好!文本…

在 Ubuntu 环境下使用 VSCode 和 PlatformIO 下载程序到 Arduino Uno

安装 VSCode 访问 VSCode 官网 下载 .deb 包使用以下命令安装&#xff1a;sudo dpkg -i <下载的文件名>.deb sudo apt-get install -f安装 PlatformIO 扩展 在 VSCode 中&#xff0c;转到扩展市场&#xff08;CtrlShiftX&#xff09;搜索 “PlatformIO IDE”点击 “安装”…

刷题记录-HOT 100(一)40道

记录题解和思路。 一、哈希表解决问题 1、两数之和 思路&#xff1a; 创建哈希表&#xff1a; 初始化了一个空字典来存储已经访问过的数字及其对应的索引。 遍历数组&#xff1a; 逐一遍历数组中的每个元素。在遍历过程中&#xff0c;针对每个元素 num&#xff0c;计算出它…

手机FM LNA方案设计

一 概述 关于手机FM的使用&#xff0c;较为传统的则是在打开FM应用前先插入有线耳机才能使用FM应用。然而随着智能手机的进步以及有线耳机日益被无线蓝牙耳机所代替&#xff0c;内置FM LNA方案被应用的越来越多&#xff0c;无需插入有线耳机&#xff0c;复用例如GSM天线也能实…

跨语言障碍:全球语言翻译神器崛起

1.背景 工作中经常要查看纯英文文档和纯英文视频&#xff0c;尽管本人经历了1年多的英语培训&#xff0c;看英文资料依然非常吃力。 大模型出来后&#xff0c;KIMI能够帮助翻译纯英文的文档内容&#xff0c;但视频翻译还没有一个很好的工具。最近发现了一款通过大模型翻译文档…

yolov9目标检测pyside6可视化检测界面python源码-用于计数统计-摄像头可用

项目概述 此项目旨在利用YOLOv9&#xff08;You Only Look Once version 9&#xff09;这一先进的目标检测模型&#xff0c;实现实时视频流中的物体识别与计数。通过集成PySide6库&#xff0c;我们能够构建一个直观且易于使用的图形用户界面&#xff08;GUI&#xff09;&#…

基于SpringBoot+Vue+MySQL的社区维修平台

系统背景 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于社区维修平台所牵扯的管理及数据保存都是非常多的&#xff0c;例如住户管理、社区公告管理、维修工管理、维修订单管理、接单信息管理、订单信息管理、在线沟通管理、举报信息管理、留言板管理、系统管理等…