ThinkPHP8极简上手指南:开启高效开发之旅

目录

  • 一、环境搭建
    • 1.1 安装 PHP
    • 1.2 安装 Composer
  • 二、安装 ThinkPHP8
  • 三、目录结构解析
  • 四、第一个简单示例:Hello, ThinkPHP8
    • 4.1 创建控制器
    • 4.2 编写控制器方法
    • 4.3 配置路由
    • 4.4 访问测试
  • 五、进阶示例:数据库查询
    • 5.1 配置数据库连接
    • 5.2 创建模型
    • 5.3 编写查询代码
    • 5.4 展示查询结果
  • 六、总结与展望


一、环境搭建

在开始使用 ThinkPHP8 开发项目之前,我们需要先搭建好开发环境,主要包括安装 PHP 和 Composer。

1.1 安装 PHP

ThinkPHP8 要求 PHP 版本为 8.0.0 及以上,你可以从PHP 官方网站下载对应操作系统的 PHP 安装包。

以 Windows 系统为例,下载完成后,将安装包解压到你希望安装的目录,比如C:\php。然后,将该目录添加到系统环境变量中,这使你可以在命令行中使用 PHP 命令。具体操作步骤如下:

  1. 右键点击 “此电脑”,选择 “属性”。
  2. 在弹出的窗口中,点击 “高级系统设置”。
  3. 在 “系统属性” 窗口中,点击 “环境变量” 按钮。
  4. 在 “系统变量” 中找到 “Path” 变量,点击 “编辑”。
  5. 在弹出的 “编辑环境变量” 窗口中,点击 “新建”,添加 PHP 的安装目录,如C:\php,然后点击 “确定” 保存设置。

接着,在 PHP 安装目录中找到并复制php.ini-development文件,将其重命名为php.ini。你可以根据需要编辑php.ini文件以配置 PHP,比如设置时区等。例如,将;date.timezone =修改为date.timezone = Asia/Shanghai。

最后,打开命令行,输入php -v命令,确认 PHP 是否成功安装。如果成功安装,会显示 PHP 的版本信息。

1.2 安装 Composer

Composer 是 PHP 的依赖管理工具,用于管理项目中的 PHP 库和包的依赖关系,ThinkPHP8 的安装依赖于 Composer。

在 Linux 和 Mac OS X 中,可以运行以下命令来安装 Composer:

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

在 Windows 中,需要下载并运行Composer-Setup.exe来安装 Composer。安装过程中,按照提示进行操作即可,安装完成后,Composer 会自动添加到系统环境变量中,你可以在命令行中直接使用composer命令。

验证 Composer 是否安装成功,打开命令行,输入composer -V,如果成功安装,会显示 Composer 的版本信息。

二、安装 ThinkPHP8

当 PHP 和 Composer 安装完成后,就可以使用 Composer 来安装 ThinkPHP8 项目了。

打开命令行工具,切换到你希望创建项目的目录,例如 Web 服务器的根目录。如果是在 Windows 系统下,假设 Web 服务器根目录为C:\xampp\htdocs,可以使用cd命令切换到该目录:

cd C:\xampp\htdocs

然后,执行 Composer 安装命令:

composer create-project topthink/think myproject

这里myproject是你的项目名称,你可以根据实际情况自定义。执行该命令后,Composer 会从远程仓库下载 ThinkPHP8 及其依赖的库,并将项目文件安装到myproject目录下,这个过程可能需要一些时间,具体时长取决于你的网络状况。

在安装过程中,如果遇到网络问题导致下载缓慢或失败,可以考虑切换到国内的 Composer 镜像源,例如阿里云镜像。切换命令如下:

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

切换完成后,再次执行安装命令即可。

安装完成后,在你指定的目录下会生成一个名为myproject的文件夹,这就是你的 ThinkPHP8 项目目录,其目录结构如下:

  • app:应用目录,存放应用的控制器、模型、视图等核心代码。
  • config:配置目录,包含应用的各种配置文件,如数据库配置、路由配置等。
  • public:公共目录,对外访问的入口,其中的index.php是整个应用的入口文件。
  • runtime:运行时目录,存放应用运行时生成的缓存文件、日志文件等。
  • vendor:第三方类库目录,Composer 安装的所有依赖库都存放在这里。
  • .env:环境配置文件,用于配置应用的运行环境参数,如调试模式、数据库连接信息等。

三、目录结构解析

深入了解 ThinkPHP8 项目的目录结构,有助于我们更好地组织和管理代码,提高开发效率。下面详细介绍各主要目录的作用:

  1. app目录:应用目录是存放核心业务逻辑的地方,是整个项目的核心所在。在app目录下,通常包含以下子目录:
    • controller:控制器目录,用于存放控制器类文件。控制器负责接收用户请求,调用模型获取数据,并将数据传递给视图进行展示。例如,我们创建一个IndexController类,用于处理网站首页的请求,代码如下:
<?php
namespace app\controller;class IndexController
{public function index(){return '这是ThinkPHP8的首页';}
}
  • model:模型目录,存放与数据库交互的模型类文件。模型用于封装数据操作逻辑,如数据的读取、插入、更新和删除等。假设我们有一个User模型,用于操作用户表数据,示例代码如下:
<?php
namespace app\model;use think\Model;class User extends Model
{// 定义模型与数据库表的对应关系,若表名与模型名一致,可省略此方法protected $table = 'user';
}
  • view:视图目录,用于存放视图文件,即 HTML 模板文件。视图负责将数据展示给用户,通常与控制器配合使用。例如,index控制器对应的视图文件index.html可放在view/index目录下。
  1. config目录:配置目录包含应用的各种配置文件,这些配置文件以 PHP 数组的形式存在,用于设置应用的各项参数和行为。常见的配置文件有:
    • app.php:应用配置文件,设置应用的基本信息,如应用命名空间、默认时区、是否开启调试模式等。例如,设置调试模式的代码如下:
return [// 应用调试模式'app_debug' => true,
];
  • database.php:数据库配置文件,配置数据库连接信息,包括数据库类型、主机地址、端口、用户名、密码和数据库名等。以 MySQL 数据库为例,配置示例如下:
return [// 数据库类型'type'            =>'mysql',// 服务器地址'hostname'        => '127.0.0.1',// 数据库名'database'        => 'your_database_name',// 用户名'username'        => 'root',// 密码'password'        => 'your_password',// 端口'hostport'        => '3306',// 数据库连接参数'params'          => [],// 数据库编码默认采用utf8'charset'         => 'utf8',
];
  • route.php:路由配置文件,定义 URL 地址与控制器方法的映射关系。通过路由配置,可以实现更灵活的 URL 访问方式,提高应用的可读性和维护性。例如,定义一个简单的路由规则:
use think\facade\Route;Route::get('index', 'app\controller\IndexController@index');
  1. public目录:公共目录是应用对外访问的入口,其中的index.php是整个应用的入口文件。所有的 HTTP 请求都会首先经过index.php,然后由它来加载框架核心文件,初始化应用环境,并将请求分发给相应的控制器进行处理。此外,public目录还可以存放一些静态资源文件,如 CSS、JavaScript 和图片等,这些文件可以直接通过 URL 进行访问。
  2. runtime目录:运行时目录用于存放应用运行时生成的文件,如缓存文件、日志文件、编译文件等。框架在运行过程中会自动生成这些文件,以提高应用的性能和稳定性。例如,缓存文件可以加快数据的读取速度,日志文件用于记录应用的运行日志,方便调试和排查问题。
  3. vendor目录:第三方类库目录,Composer 安装的所有依赖库都存放在这里。在开发过程中,我们可以通过 Composer 安装各种第三方类库,如数据库操作库、邮件发送库等,这些类库会被安装到vendor目录下,方便我们在项目中使用。
  4. .env文件:环境配置文件,用于配置应用的运行环境参数。通过.env文件,可以方便地切换不同的环境配置,如开发环境、测试环境和生产环境等。例如,在开发环境中,可以开启调试模式,方便查看错误信息;在生产环境中,关闭调试模式,提高应用的安全性。.env文件的示例内容如下:
# 开启调试模式
APP_DEBUG=true
# 数据库配置
DB_TYPE=mysql
DB_HOST=127.0.0.1
DB_NAME=your_database_name
DB_USER=root
DB_PASS=your_password
DB_PORT=3306
DB_CHARSET=utf8

四、第一个简单示例:Hello, ThinkPHP8

接下来,我们通过一个简单的示例来展示如何使用 ThinkPHP8 进行开发。这个示例将实现一个基本的 “Hello, ThinkPHP8” 页面,通过浏览器访问项目时,页面会显示该字符串。

4.1 创建控制器

在app/controller目录下创建一个控制器文件,命名为IndexController.php。你可以使用文本编辑器或集成开发环境(IDE)来创建和编辑文件。如果使用命令行工具,在项目根目录下执行以下命令:

php think make:controller Index

上述命令会自动在app/controller目录下生成IndexController.php文件,并填充一些基本的代码结构。

4.2 编写控制器方法

打开IndexController.php文件,编写一个用于返回 “Hello, ThinkPHP8” 字符串的方法。在控制器类中添加如下代码:

<?php
namespace app\controller;class IndexController
{public function hello(){return 'Hello, ThinkPHP8';}
}

在上述代码中,我们定义了一个IndexController控制器类,其中包含一个hello方法,该方法直接返回一个字符串Hello, ThinkPHP8。

4.3 配置路由

在 ThinkPHP8 中,需要配置路由才能通过 URL 访问到控制器中的方法。打开config/route.php文件,添加如下路由规则:

use think\facade\Route;Route::get('hello', 'app\controller\IndexController@hello');

这段代码定义了一个GET请求的路由规则,当用户访问/hello这个 URL 时,会调用app\controller\IndexController控制器类中的hello方法。

4.4 访问测试

完成上述步骤后,就可以通过浏览器访问项目来测试这个简单示例了。进入命令行下面,执行下面指令:

php think run

在浏览器地址栏中输入:

http://127.0.0.1:8000/hello

如果一切配置正确,浏览器页面将显示Hello, ThinkPHP8,这表明你已经成功完成了第一个 ThinkPHP8 示例。

五、进阶示例:数据库查询

在实际应用开发中,数据库操作是非常常见的需求。下面我们将通过一个进阶示例,展示如何在 ThinkPHP8 中进行数据库查询。

5.1 配置数据库连接

在使用数据库之前,需要先配置数据库连接信息。可以在.env文件或config/database.php中进行配置。以 MySQL 数据库为例,在.env文件中添加如下配置:

DB_TYPE=mysql
DB_HOST=127.0.0.1
DB_NAME=your_database_name
DB_USER=root
DB_PASS=your_password
DB_PORT=3306
DB_CHARSET=utf8

如果直接在config/database.php中配置,则代码如下:

return [// 数据库类型'type'            =>'mysql',// 服务器地址'hostname'        => '127.0.0.1',// 数据库名'database'        => 'your_database_name',// 用户名'username'        => 'root',// 密码'password'        => 'your_password',// 端口'hostport'        => '3306',// 数据库连接参数'params'          => [],// 数据库编码默认采用utf8'charset'         => 'utf8',
];

请根据实际的数据库信息,修改上述配置中的数据库名、用户名、密码等参数。

5.2 创建模型

在app/model目录下创建对应数据库表的模型文件。假设数据库中有一张名为users的用户表,我们来创建User模型。在app/model目录下创建User.php文件,代码如下:

<?php
namespace app\model;use think\Model;class User extends Model
{// 如果表名与模型名不一致,可通过此属性指定表名protected $table = 'users';
}

上述代码定义了一个User模型类,继承自think\Model,并通过protected table属性指定了对应的数据库表名为users。如果表名与模型名一致(不包含前缀),则可以省略table属性指定了对应的数据库表名为users。如果表名与模型名一致(不包含前缀),则可以省略table属性指定了对应的数据库表名为users。如果表名与模型名一致(不包含前缀),则可以省略table属性的定义。

5.3 编写查询代码

在控制器中使用模型进行数据库查询。在app/controller目录下创建UserController.php文件,编写如下代码:

<?php
namespace app\controller;use app\model\User;
use think\facade\View;class UserController
{public function index(){// 查询所有用户数据$users = User::all();// 将查询结果传递给视图View::assign('users', $users);return view();}
}

在上述代码中,首先通过use app\model\User;引入User模型类,然后在index方法中使用User::all()方法查询users表中的所有数据,并将结果赋值给$users变量。接着,使用View::assign(‘users’, users);将users);将users);users变量传递给视图,最后通过return view();渲染并返回视图。

5.4 展示查询结果

在app/view目录下创建user子目录(与控制器名对应),并在其中创建index.html视图文件(与控制器方法名对应),用于展示查询结果。index.html文件代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>用户列表</title>
</head>
<body><h1>用户列表</h1><table border="1"><thead><tr><th>ID</th><th>用户名</th><!-- 根据实际表结构添加更多列 --></tr></thead><tbody>{foreach $users as $user}<tr><td>{$user.id}</td><td>{$user.username}</td><!-- 根据实际表结构输出更多字段 --></tr>{/foreach}</tbody></table>
</body>
</html>

上述代码使用了 ThinkPHP8 内置的模板引擎语法。通过{foreach $users as KaTeX parse error: Expected 'EOF', got '}' at position 5: user}̲循环遍历从控制器传递过来的users数据,并将每个用户的id和username(假设表中有这两个字段)输出到 HTML 表格中。请根据实际的表结构,修改表格的表头和字段输出部分。

最后,配置路由以访问UserController的index方法。在config/route.php文件中添加如下路由规则:

use think\facade\Route;Route::get('user', 'app\controller\UserController@index');

这样,当用户访问http://127.0.0.1:8000/user时,就可以看到从数据库中查询并展示的用户列表页面了。

六、总结与展望

通过以上步骤,我们成功完成了用 ThinkPHP8 开发简单示例以及数据库查询的进阶示例。在开发过程中,我们掌握了 ThinkPHP8 的环境搭建、目录结构、路由配置、控制器编写、模型使用以及数据库操作等关键知识点。ThinkPHP8 以其简洁的语法、高效的性能和丰富的功能,为 PHP 开发者提供了一个强大的开发框架,大大提高了开发效率。

然而,这仅仅是 ThinkPHP8 的冰山一角,框架还拥有众多强大的功能等待你去挖掘,比如中间件、事件机制、缓存处理、任务调度等。这些功能在实际项目开发中能够发挥重要作用,帮助你构建更加健壮、高效和灵活的 Web 应用。

希望你能以本文为起点,继续深入学习 ThinkPHP8 框架,不断探索其更多的可能性,将所学知识运用到实际项目中,创造出优秀的 Web 应用。如果你在学习过程中遇到任何问题,欢迎查阅 ThinkPHP8 官方文档,也可以在相关技术社区与其他开发者交流探讨。

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

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

相关文章

智能制造之物料详解

在制造业业务系统中&#xff0c;物料流转贯穿“需求→采购→入库→生产→成品→交付”全流程&#xff0c;各系统通过数据协同实现物料状态、位置、数量的精准追踪。以下按流转阶段拆解&#xff1a;一、需求发起与计划阶段&#xff08;CRM/ERP/PLM主导&#xff09;1. 需求源头…

Qt的安装和环境配置

QT开发环境的搭建&#xff0c;需要安装3个部分&#xff0c;C编译器、Qt SDK(SDK是软件开发工具包)、QT的集成开发环境(IDE)Qt的3种集成开发环境&#xff1a;Qt Creator&#xff1a;是由Qt官方提供的&#xff0c;容易上手&#xff0c;不需要额外的配置&#xff0c;但是有一些bug…

解析MCUboot的实现原理和Image结构

目录 概述 1 MCUboot的功能 1.1 代码包结构 1.2 限制 2 MCUboot Image 2.1 Image格式 2.2 Flash Map 2.3 Image 槽 2.4 使用scratch交换 2.5 Image 尾部数据结构 3 交换区 3.1 单交换区 3.2 Multiple Image boot 3.3 Image交换 4 交换状态&#xff08;swap statu…

YOLOv8目标检测项目代码详解与习题

YOLOv8目标检测项目代码详解与习题一、项目代码详解该代码是基于 YOLOv8 和 OpenCV 实现的图像目标检测项目&#xff0c;核心功能是加载预训练的 YOLOv8 模型&#xff0c;对指定图像进行目标检测&#xff0c;然后可视化检测结果并保存或显示。以下是逐行解析&#xff1a;# -*- …

gradle关于dependency-management的使用

1、相关文档Spring官方文档&#xff1a;https://docs.spring.io/dependency-management-plugin/docs/current-SNAPSHOT/reference/html/#introduction仓库版本查看&#xff1a;https://mvnrepository.com/artifact/io.spring.gradle/dependency-management-plugin/1.0.15.RELEA…

Java SpringBoot 对接FreeSwitch

1.增加Maven依赖<dependency><groupId>org.freeswitch.esl.client</groupId><artifactId>org.freeswitch.esl.client</artifactId><version>0.9.2</version></dependency><!-- XML-RPC --><dependency><groupI…

限流算法与实现

费曼学习法学习限流算法为什么要限流mysql插入600次/秒超过这个阈值&#xff0c;要么使用mysql集群、要么限流&#xff0c;防止宕机有哪些算法固定窗口就是个计数器&#xff0c;一秒内超过阈值&#xff0c;不允许访问缺点&#xff1a;不均匀&#xff0c;跨越临界点的一秒内&…

Android本地浏览PDF(Android PDF.js 简要学习手册)

环境 Min SDK: 21 依赖&#xff1a; implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1" implementation "androidx.webkit:webkit:1.12.0"权限&#xff1a; <uses-permission android:name"android.permission.INTERNE…

CVE-2022-41128

概述CVE-2022-41128 是 Microsoft Internet Explorer&#xff08;IE&#xff09;浏览器中 JavaScript 引擎&#xff08;JScript/Chakra&#xff09;的一个 0day 漏洞&#xff08;披露时无官方补丁&#xff09;&#xff0c;属于内存破坏类漏洞&#xff0c;可被用于远程代码执行&…

基于LSTM的时间序列到时间序列的回归模拟

获取项目源码点击文末名片项目背景与目标 本项目旨在开发一种基于长短期记忆网络&#xff08;LSTM&#xff09;的模型&#xff0c;用于时间序列到时间序列的回归模拟任务。通过处理多组不同来源的时间序列数据&#xff0c;本模型的目标是从给定的输入序列中预测相应的输出序列。…

Linux基础命令详解:从入门到精通

本文整理了Linux系统中最常用的基础命令&#xff0c;每个命令都配有详细说明和具体示例&#xff0c;帮助你快速掌握Linux操作技巧。文章中用的终端是XShell,系统是Centos&#x1f4c1; 1. ls - 列出目录&#xff08;文件夹&#xff09;内容 功能&#xff1a;显示当前目录下的文…

正点原子stm32F407学习笔记10——输入捕获实验

一、输入捕获简介 输入捕获模式可以用来测量脉冲宽度或者测量频率。我们以测量脉宽为例&#xff0c;用一个简图来 说明输入捕获的原理&#xff0c;如图所示&#xff1a;假定定时器工作在向上计数模式&#xff0c;图中 t1到t2 时间&#xff0c;就是我们需要测量的高电平时间。测…

深入理解设计模式:状态模式(State Pattern)

在软件开发中&#xff0c;我们经常会遇到对象的行为随着其内部状态的变化而变化的情况。例如&#xff0c;一个订单可能处于"待支付"、"已支付"、"已发货"或"已完成"等不同状态&#xff0c;每个状态下订单的操作逻辑可能完全不同。如果…

企业级网络综合集成实践:VLAN、Trunk、STP、路由协议(OSPF/RIP)、PPP、服务管理(TELNET/FTP)与安全(ACL)

NE综合实验4 一、实验拓扑二、实验需求 按照图示配置IP地址。Sw7和sw8之间的直连链路配置链路聚合。公司内部业务网段为vlan10和vlan20&#xff0c;vlan10是市场部&#xff0c;vlan20是技术部&#xff0c;要求对vlan进行命名以便区分识别&#xff1b;pc10属于vlan10&#xff0c…

小架构step系列20:请求和响应的扩展点

1 概述通过上一篇了解请求和响应的流程&#xff0c;Spring在设计上留了不少扩展点。里面通过查找接口的方式获取的地方&#xff0c;都可以成为一种扩展点&#xff0c;因为只要实现这类接口就可以成为Spring加载的一部分。本文了解一下这些扩展点&#xff0c;方便后面进行扩展。…

模型材质一键替换~轻松还原多种三维场景

1. 概述模型的材质决定了三维场景的整体视效&#xff0c;山海鲸可视化不仅支持模型材质的替换与编辑&#xff0c;而且提供了大量现成的模型材质供大家使用&#xff0c;能够帮助大家实现更高效的三维场景搭建。模型材质主要分为PBR材质和水面材质两个部分。其中大部分静态模型都…

【JS逆向基础】数据库之mysql

前言&#xff1a;mysql数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;目前属于 Oracle 旗下公司。MySQL 最流行的关MySQL是一个开源免费的关系型数据库管系型数据库管理系统&#xff0c;在 WEB 应用方面ySQL是最好的 RDBMS (Relational Database Management S…

金融工程、金融与经济学知识点

本文整理了20个金融工程、金融和经济学知识点及逻辑&#xff0c;这些是理解金融市场运作和进行量化分析的基石。 1. 金融工程 - 远期与期权&#xff08;Forward & Option&#xff09;的定价与风险管理 远期定价&#xff1a; 利用无套利原则&#xff0c;远期合约的价格应等…

Vue 3 中导出 Excel 文件

在 Vue 3 中导出 Excel 文件&#xff0c;通常可以使用一些流行的 JavaScript 库&#xff0c;如 SheetJS (xlsx) 或者 exceljs。这里我将分别介绍如何使用这两个库来在 Vue 3 应用中导出 Excel 文件。方法 1&#xff1a;使用 SheetJS (xlsx)安装 SheetJS首先&#xff0c;你需要安…

奇麟大数据:前端大文件上传解决方案

在奇麟大数据业务系统的开发及使用过程中&#xff0c;例如OBS对象存储文件管理、流计算DSC依赖管理&#xff0c;经常会遇到上传文件这样的基础需求&#xff0c;一般情况下&#xff0c;前端上传文件就是new FormData&#xff0c;然后把文件 append 进去&#xff0c;然后post发送…