ThinkPHP 3.2 完整入门教程
目录
-
第一部分:ThinkPHP 3.2 简介
(图片来源网络,侵删)- 什么是 ThinkPHP?
- 为什么选择 ThinkPHP 3.2?
- MVC 架构思想
-
第二部分:开发环境搭建
- 必备软件
- 集成环境推荐
- 创建第一个项目
-
第三部分:项目结构详解
- 目录结构一览
- 核心目录介绍
-
第四部分:MVC 入门
- M (Model) - 模型:数据库操作
- V (View) - 视图:模板展示
- C (Controller) - 控制器:业务逻辑
-
第五部分:核心功能详解
(图片来源网络,侵删)- 配置:如何修改和应用配置
- 路由:URL 访问规则
- 数据 CURD:增删改查操作
- 数据验证:表单数据验证
- Session 和 Cookie:用户状态管理
-
第六部分:实战案例 - 留言板系统
- 需求分析
- 数据库设计
- 功能实现(列表、添加、删除)
- 完整代码示例
-
第七部分:部署与总结
- 项目部署到服务器
- ThinkPHP 3.2 的优缺点
- 学习资源
第一部分:ThinkPHP 3.2 简介
什么是 ThinkPHP?
ThinkPHP 是一个免费、开源、快速、简单的面向对象的轻量级 PHP 开发框架,遵循 Apache2.0 协议发布,它是为了简化企业级应用开发和敏捷 Web 应用开发而诞生的。
为什么选择 ThinkPHP 3.2?
- 文档丰富:3.2 版本拥有非常详尽的官方文档和社区教程,遇到问题容易找到答案。
- 稳定成熟:经过多年发展,3.2 版本非常稳定, bug 较少,适合商业项目。
- 中文友好:由国人开发,对中文编码、分页等支持极佳,文档和社区交流均为中文。
- “傻瓜式”开发:提供了大量便捷的函数和封装,让开发者能快速上手,专注于业务逻辑。
MVC 架构思想
ThinkPHP 遵循经典的 MVC 设计模式,将应用分为三个部分:

- Model (模型):负责与数据库交互,处理业务数据。
- View (视图):负责数据显示,通常是 HTML 模板文件。
- Controller (控制器):接收用户请求,调用模型处理数据,并选择合适的视图进行展示。
流程:用户请求 -> 控制器 -> 模型 -> 数据库 -> 模型 -> 控制器 -> 视图 -> 用户。
第二部分:开发环境搭建
必备软件
- PHP 环境:ThinkPHP 3.2 要求 PHP 版本为 5.3+,推荐使用 PHP 5.4 或 5.6。
- Web 服务器:如 Apache 或 Nginx。
- 数据库:如 MySQL 5.0+。
- 代码编辑器:如 VS Code, Sublime Text, PhpStorm 等。
集成环境推荐
为了方便开发,强烈推荐使用集成环境,它们已经配置好了 PHP, Apache/Nginx, MySQL 等环境。
- phpStudy (Windows 用户首选):http://www.phpstudy.net/
- XAMPP (跨平台):https://www.apachefriends.org/
- MAMP (Mac 用户):https://www.mamp.info/
创建第一个项目
- 下载 ThinkPHP 3.2 核心库:https://github.com/top-think/thinkphp
- 将下载的
ThinkPHP文件夹解压,并将其重命名为你的项目名,myapp。 - 将
myapp文件夹放到你的 Web 服务器根目录下(如 phpStudy 的WWW目录)。 - 配置虚拟主机或修改 hosts 文件,确保可以通过
http://localhost/myapp访问。 - 在浏览器中访问
http://localhost/myapp。 - 如果看到 ThinkPHP 的欢迎页面,说明环境配置成功!首次访问会自动生成必要的目录结构。
第三部分:项目结构详解
访问成功后,你的 myapp 目录下会自动生成以下结构:
myapp/
├─Application/ // 应用目录
│ ├─Common/ // 公共模块
│ ├─Home/ // 默认 Home 模块
│ │ ├─Common/ // Home 模块公共函数
│ │ ├─Conf/ // Home 模块配置文件
│ │ ├─Controller/ // Home 模块控制器
│ │ └─View/ // Home 模块视图
│ └─Admin/ // Admin 模块(示例)
├─Public/ // 对外访问目录
│ ├─index.php // 入口文件
│ ├─static/ // 静态资源目录
│ └─uploads/ // 上传文件目录
├─ThinkPHP/ // ThinkPHP 核心目录
├─Uploads/ // 上传文件目录(根级)
└─.htaccess // Apache URL 重写规则
核心目录介绍:
Application/:你的应用主目录,所有业务代码都在这里。Application/Home/:默认的前台模块。Controller/:放控制器类文件,如IndexController.class.php。View/:放视图模板文件,如index.html。Conf/:模块级的配置文件,如config.php。
Public/:Web 服务器指向的目录,存放入口文件和静态资源(CSS, JS, 图片)。ThinkPHP/:框架核心,不要修改这里的文件。index.php(在 Public 目录下):整个应用的唯一入口文件。
第四部分:MVC 入门
C (Controller) - 控制器
控制器是连接模型和视图的桥梁。
步骤:
- 在
Application/Home/Controller/目录下创建一个文件,HelloController.class.php。 - 编写代码:
<?php
namespace Home\Controller;
use Think\Controller; // 引入父类控制器
class HelloController extends Controller {
public function sayHello($name = 'ThinkPHP') {
// 向视图传递数据
$this->assign('name', $name);
// 指定视图文件
// ThinkPHP 会自动在 View/Home/ 目录下寻找 sayHello.html
$this->display();
}
}
- 访问这个方法:
http://localhost/myapp/index.php/Home/Hello/sayHello/name/WorldHome:模块名Hello:控制器名sayHello:方法名name/World:传递的参数
V (View) - 视图
视图负责展示数据,通常使用模板语法。
- 在
Application/Home/View/Hello/目录下创建sayHello.html文件。 - 编写代码:
<!DOCTYPE html>
<html>
<head>你好,{$name}!</title>
</head>
<body>
<h1>{$name}</h1>
<p>欢迎使用 ThinkPHP 3.2!</p>
</body>
</html>
{$name}是 ThinkPHP 的模板语法,用于接收控制器中通过assign()传递过来的$name变量。
M (Model) - 模型
模型负责与数据库交互,ThinkPHP 提供了强大的 M() 函数和 Model 类来简化数据库操作。
假设我们有一个 tp_user 表:
CREATE TABLE `tp_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `email` varchar(100) NOT NULL, `create_time` int(11) DEFAULT NULL, PRIMARY KEY (`id`) );
使用 M() 函数(推荐,无需创建模型类):
// 在控制器中
public function userList() {
// 实例化一个 User 模型 (对应 tp_user 表)
$User = M('User');
// 查询数据
// 1. 查询所有数据
$list = $User->select();
// 2. 查询条件
// $user = $User->where('id=1')->find();
// 3. 查询并分页
// $page = $User->page($_GET['p'].',10')->select();
// $this->assign('list', $list);
// $this->display();
}
第五部分:核心功能详解
配置
- 项目级配置:修改
Application/Common/Conf/convention.php或新建Application/Common/Conf/config.php。 - 模块级配置:在对应模块的
Conf/目录下创建config.php。 - 动态配置:在控制器中可以使用
C()函数。
示例:
// 在模块配置文件 Application/Home/Conf/config.php 中
return array(
'DB_TYPE' => 'mysql', // 数据库类型
'DB_HOST' => 'localhost', // 服务器地址
'DB_NAME' => 'myapp', // 数据库名
'DB_USER' => 'root', // 用户名
'DB_PWD' => 'root', // 密码
'DB_PREFIX' => 'tp_', // 数据库表前缀
);
路由
ThinkPHP 3.2 默认是 Pathinfo 模式的 URL,已经非常友好,可以通过 URL_MODEL 配置项来改变。
URL_MODEL => 0: 普通模式index.php?m=home&c=user&a=addURL_MODEL => 1: Pathinfo 模式index.php/Home/User/add(默认)URL_MODEL => 2: Rewrite 模式 (需要服务器配置.htaccess支持)/Home/User/add
数据 CURD
- Create (创建):
$User = M('User'); $data['username'] = 'test'; $data['email'] = 'test@example.com'; $User->add($data); // 返回新插入数据的ID - Read (读取):
$User = M('User'); // 查询单条 $user = $User->find(1); // 根据主键查 // 查询多条 $list = $User->where('status=1')->order('id DESC')->select(); - Update (更新):
$User = M('User'); $data['id'] = 1; $data['username'] = 'new_name'; $User->save($data); // 根据主键更新 - Delete (删除):
$User = M('User'); $User->delete(1); // 删除 id=1 的记录 $User->where('status=0')->delete(); // 批量删除
数据验证
在模型类中定义 _validate 属性。
// Application/Home/Model/UserModel.class.php
<?php
namespace Home\Model;
use Think\Model;
class UserModel extends Model {
// 定义验证规则
protected $_validate = array(
// array(验证字段, 规则, 错误提示, 验证条件, 验证时间)
array('username', 'require', '用户名不能为空!', 1), // 必填
array('username', '', '用户名已经存在!', 1, 'unique', 1), // 唯一
array('email', 'email', '邮箱格式不正确!', 2), // 邮箱格式
);
}
// 在控制器中使用
$User = D('User'); // 使用 D 函数会自动验证
if (!$User->create()) {
// 如果创建失败,表示验证没有通过,输出错误提示信息
exit($User->getError());
}
// 验证通过,继续执行...
Session 和 Cookie
-
Session:
// 设置 session('user_id', 1); session('user_info', array('name' => 'Tom')); // 获取 $userId = session('user_id'); $userInfo = session('user_info'); // 删除 session('user_id', null); // 删除单个 session(null); // 清空所有 -
Cookie:
// 设置 (名称, 值, 有效期(秒), 路径, 域名) cookie('name', 'value', 3600); // 获取 $value = cookie('name'); // 删除 cookie('name', null);
第六部分:实战案例 - 留言板系统
需求分析
- 留言列表页:显示所有留言,包含内容和发布时间。
- 添加留言页:一个表单,用于提交新留言。
数据库设计
CREATE TABLE `tp_message` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` text NOT NULL, `create_time` int(11) DEFAULT NULL, PRIMARY KEY (`id`) );
功能实现
步骤 1:创建控制器 MessageController.class.php
<?php
namespace Home\Controller;
use Think\Controller;
class MessageController extends Controller {
// 显示留言列表
public function index() {
$Message = M('Message');
// 按创建时间倒序排列
$list = $Message->order('id DESC')->select();
$this->assign('list', $list);
$this->display();
}
// 处理留言提交
public function add() {
if (IS_POST) {
$Message = D('Message');
if ($Message->create()) {
// 自动填充创建时间
$Message->create_time = time();
if ($Message->add()) {
$this->success('留言成功!', U('index'));
} else {
$this->error('留言失败!');
}
} else {
$this->error($Message->getError());
}
} else {
$this->error('非法请求!');
}
}
}
步骤 2:创建视图
Application/Home/View/Message/index.html
<!DOCTYPE html>
<html>
<head>留言板</title>
<meta charset="utf-8">
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
.message-form { margin-bottom: 20px; padding: 10px; border: 1px solid #ccc; }
.message-list { border: 1px solid #ccc; padding: 10px; }
.message-item { padding: 10px; border-bottom: 1px solid #eee; }
</style>
</head>
<body>
<h1>ThinkPHP 留言板</h1>
<!-- 留言表单 -->
<div class="message-form">
<form method="post" action="__URL__/add">
<textarea name="content" rows="4" cols="50" placeholder="请输入留言内容..."></textarea><br>
<input type="submit" value="提交留言">
</form>
</div>
<!-- 留言列表 -->
<div class="message-list">
<volist name="list" id="msg">
<div class="message-item">
<p>{$msg.content}</p>
<small>发布时间:{:date('Y-m-d H:i:s', $msg['create_time'])}</small>
</div>
</volist>
</div>
</body>
</html>
步骤 3:访问
访问 http://localhost/myapp/index.php/Message/index 即可看到留言板界面。
第七部分:部署与总结
项目部署到服务器
- 将整个项目文件夹(
myapp)通过 FTP 或其他工具上传到服务器的 Web 根目录。 - 确保 Web 服务器(如 Apache/Nginx)的用户对
Application/Runtime目录有写入权限。 - 修改
Application/Common/Conf/config.php中的数据库配置,使其连接到服务器上的数据库。 - 如果使用 Rewrite 模式,确保服务器配置了正确的
.htaccess或 Nginx 重写规则。 - 通过域名访问项目。
ThinkPHP 3.2 的优缺点
- 优点:
- 快速开发,文档齐全,社区活跃。
- 对中文支持好,学习曲线平缓。
- 内置了大量常用功能,如缓存、验证、分页等。
- 缺点:
- 相对于现代框架(如 Laravel, Symfony),架构设计略显陈旧。
- 安全性方面需要开发者自己注意,框架默认配置可能不够严格。
- 生态和扩展性不如现代框架。
学习资源
- 官方手册:ThinkPHP 3.2 完全开发手册 (这是最重要的资源)
- 开源中国:ThinkPHP 3.2 教程
- Bilibili:搜索 "ThinkPHP 3.2 入门",有大量视频教程。
希望这份详细的教程能帮助你快速掌握 ThinkPHP 3.2!祝你学习愉快!
